1亿条记录的MongoDB数据库随机查询性能测试

mongdb性能压力测试,随机查询,数据量1亿条记录

操作系统centos6.4x64位

从测试结果看,当mongodb将数据全部载入到内存后,查询速度根据文档的大小,性能瓶颈通常会是在网络流量和CPU的处理性能(该次测试中当数据全部在内存后,纯粹的查询速度可以稳定在10W/S左右,系统load可以维持在1以下,由于此时CPU已经被使用到极限了,当并发再大时load值会直线飙升,性能急剧下降)。

压力生成服务器与Mongodb服务器基本配置

cpu型号:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz

内存:64G

硬盘:10K转速 6块做RAID0,raid卡cache 1G(磁盘的IO性能决定MONGODB将非热点数据载入到内存的速度,当热点数据全部在内存后,IO性能可以忽略)

网卡速度:接入千兆交互机,速度1000MB

数据结构,user_id为索引键值为0-99999999,数据总大小约37G左右,全部载入内存后约32G

> db.thing.findOne();

{

"_id" : ObjectId("51fd6830c6db9d15676f89ef"),

"ip" : "192.168.168.254",

"g_roup" : "kiwi",

"mac" : "of:fd:67:8c:2f:8f",

"address" : "hongmei1801num",

"user_id" : 10000000,

"name" : "user10000000",

"title" : "system",

"database" : "mongodb",

"telphone" : NumberLong("15718441234"),

"mail" : "yj@chinapnr.com",

"os" : "win7",

"company" : "chinapnr"

}

压力生成脚本开启40个进程,并发随机查询

[root@mdb-166 app]# cat mselectmongodb.py

import time,pymongo,multiprocessing,random,string

class SqlToMongo:

def m_sql(self,x,y):

server="mongodb://python:oracle@192.168.4.167:27017/syslog"

conn=pymongo.Connection(server)

db=conn.syslog

col=db.thing

start=x*y

end=start+x

for i in xrange(start,end):

d=random.randint(start,end)

val=col.find({"user_id":d})

a=list(val)

def gen_load(x,taskid):

task=SqlToMongo()

print "task %s start!" % taskid

task.m_sql(x,taskid)

if __name__ == "__main__":

inser_number=2500000

pro_pool = multiprocessing.Pool(processes=101)

print time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))

start_time=time.time()

manager = multiprocessing.Manager()

for i in xrange(40):

taskid=i

pro_pool.apply_async(gen_load,args=(inser_number,taskid))

pro_pool.close()

pro_pool.join()

elapsed = time.time()-start_time

print elapsed

time.sleep(1)

print "Sub-process(es) done."

压力生成服务器负载,同时开启80个并发时抗不住了

top - 17:12:59 up 2 days,  7:34,  4 users,  load average: 35.87, 29.41, 18.16

Tasks: 487 total,  64 running, 423 sleeping,   0 stopped,   0 zombie

Cpu0  : 88.1%us, 10.6%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  : 87.7%us, 10.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  : 87.7%us, 11.0%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  : 88.0%us, 10.3%sy,  0.0%ni,  1.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu4  : 87.7%us, 11.0%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  : 88.7%us,  9.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  : 40.2%us,  3.3%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi, 56.1%si,  0.0%st

Cpu7  : 89.7%us,  8.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu8  : 88.1%us, 10.6%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu9  : 89.7%us,  9.3%sy,  0.0%ni,  1.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu10 : 88.7%us,  9.9%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu11 : 88.4%us, 10.2%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  65909128k total,  5409148k used, 60499980k free,    90680k buffers

Swap:  8388600k total,        0k used,  8388600k free,  4392420k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

13342 root      20   0  178m 9056 1480 R 15.9  0.0   5:15.79 python mselectmongodb.py

13430 root      20   0  178m 8976 1468 R 15.9  0.0   3:05.26 python mselectmongodb.py

13321 root      20   0  178m 9000 1464 R 15.6  0.0   5:17.26 python mselectmongodb.py

........

13311 root      20   0  178m 8980 1464 R 14.9  0.0   5:21.70 python mselectmongodb.py

系统负载,

[root@mdb-167 ~]# top

并发进程80的系统负载

[root@mdb-167 ~]# top

top - 17:08:33 up  4:49,  5 users,  load average: 0.00, 0.00, 1.05

Tasks: 287 total,   2 running, 285 sleeping,   0 stopped,   0 zombie

Cpu0  : 60.1%us, 31.4%sy,  0.0%ni,  8.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  : 57.8%us, 33.0%sy,  0.0%ni,  9.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  : 58.4%us, 31.4%sy,  0.0%ni, 10.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  : 54.8%us, 33.9%sy,  0.0%ni, 11.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu4  : 55.8%us, 31.8%sy,  0.0%ni, 12.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  : 53.4%us, 32.9%sy,  0.0%ni, 13.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  : 31.4%us, 12.7%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi, 55.9%si,  0.0%st

Cpu7  : 61.0%us, 31.7%sy,  0.0%ni,  7.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu8  : 59.7%us, 32.3%sy,  0.0%ni,  8.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu9  : 59.0%us, 32.4%sy,  0.0%ni,  8.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu10 : 59.4%us, 31.4%sy,  0.0%ni,  9.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu11 : 57.8%us, 32.1%sy,  0.0%ni, 10.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  65909128k total, 34281160k used, 31627968k free,    50416k buffers

Swap:  8388600k total,        0k used,  8388600k free, 33502796k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

2924 mdb       20   0 80.7g  31g  31g S 1092.6 50.7 458:42.39 /app/mongodb/bin/mongod -f /app/mongodb/etc/mdb.conf

1967 root      20   0     0    0    0 S  0.3  0.0   0:05.40 [kondemand/6]

1996 root      20   0 10964  720  432 S  0.3  0.0   0:05.12 irqbalance

3045 mdb       20   0 84500  38m 7076 S  0.3  0.1   0:01.99 mongostat -h 127.0.0.1 --port 27017 -u root -p xxxxx

mongstat监控

insert  query update delete getmore command flushes mapped  vsize    res faults    locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0  92408     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    20|0     5m    28m    82   17:08:32

*0  92827     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    19|0     5m    28m    82   17:08:33

.......

*0  93717     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    25|0     5m    28m    82   17:08:38

*0  92193     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.1%          0       1|0    11|0     5m    28m    82   17:08:39

*0  92250     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    25|0     5m    28m    82   17:08:40

*0  93790     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       1|0    16|0     5m    28m    82   17:08:41

网络流量

[root@mdb-167 app]# ./check_netflow.py -l 1 -i p1p1 -t 1

IN 1 seconds network transmit and receive average(KB)

transmit=34101,receive=11370

transmit=34354,receive=11452

.....

transmit=33957,receive=11322

transmit=34045,receive=11353

transmit=34244,receive=11416

磁盘IO

[root@mdb-167 ~]# tail -f mselectmongodb

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    4.00     0.00    48.00    24.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

.....

sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    5.00     0.00    48.00    19.20     0.00    0.00   0.00   0.00

二、并发进程达到120的时候系统负载(由于CPU的处理能力,系统已经无法承受)

top - 16:57:57 up  3:47,  5 users,  load average: 58.18, 30.82, 16.40

Tasks: 288 total,   1 running, 287 sleeping,   0 stopped,   0 zombie

Cpu0  : 59.6%us, 40.2%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  : 59.3%us, 40.5%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  : 59.0%us, 40.8%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  : 58.7%us, 41.0%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu4  : 58.8%us, 40.9%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  : 58.8%us, 40.9%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  : 27.2%us, 13.1%sy,  0.0%ni,  0.1%id,  0.0%wa,  0.0%hi, 59.6%si,  0.0%st

Cpu7  : 60.5%us, 39.3%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu8  : 60.2%us, 39.5%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu9  : 59.8%us, 39.9%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu10 : 59.5%us, 40.2%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu11 : 59.4%us, 40.4%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  65909128k total, 34278248k used, 31630880k free,    45652k buffers

Swap:  8388600k total,        0k used,  8388600k free, 33501056k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

2924 mdb       20   0 80.7g  31g  31g S 1193.2 50.4 165:06.51 /app/mongodb/bin/mongod -f /app/mongodb/etc/mdb.conf

mongstat监控

insert  query update delete getmore command flushes mapped  vsize    res faults    locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0 103334     *0     *0       0     1|0       0  40.1g  80.7g  31.7g      0  syslog:0.1%          0       0|0    56|0     6m    31m   122   16:55:19

*0 103299     *0     *0       0     3|0       0  40.1g  80.7g  31.7g      0  syslog:0.0%          0       0|0    55|0     6m    31m   122   16:55:20

......

*0 102858     *0     *0       0     3|0       0  40.1g  80.7g  31.7g      0  syslog:0.0%          0       0|0    66|0     6m    31m   122   16:55:26

*0 103201     *0     *0       0     1|0       0  40.1g  80.7g  31.7g      0  syslog:0.0%          0       0|0    60|0     6m    31m   122   16:55:27

*0 102381     *0     *0       0     3|0       0  40.1g  80.7g  31.7g      0  syslog:0.1%          0       1|0    89|0     6m    31m   122   16:55:28

磁盘IO

[root@mdb-167 ~]# tail -f mselectmongodb

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    4.00     0.00    48.00    24.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

.....

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda               0.00     7.00    0.00    5.00     0.00    48.00    19.20     0.00    0.00   0.00   0.00

网络流量

transmit=37567,receive=12525

......

transmit=37691,receive=12568

transmit=37592,receive=12534

transmit=37480,receive=12498

以下是mongodb从测试开始时的查询速度变化过程,当数据逐步载入内存后,查询速度也在逐步提高,大约会花费了20分钟将所有数据载入到了内存。

[mdb@mdb-167 ~]$ more  mselectmongodb

connected to: 127.0.0.1:27017

insert  query update delete getmore command flushes mapped  vsize    res faults   locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0    679     *0     *0       0     1|0       0  40.1g  80.6g   494m    671 syslog:1.0%          0       0|0     0|0    40k   213k    42   16:37:16

*0    562     *0     *0       0     3|0       0  40.1g  80.6g   500m    625 syslog:0.9%          0      36|0     2|0    33k   176k    42   16:37:17

..........

*0    626     *0     *0       0     1|0       0  40.1g  80.6g   550m    667 syslog:1.0%          0      36|0     1|0    36k   196k    42   16:37:24

*0    649     *0     *0       0     3|0       1  40.1g  80.6g   557m    671 syslog:0.9%          0      35|0     1|0    38k   202k    42   16:37:25

insert  query update delete getmore command flushes mapped  vsize    res faults   locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0    706     *0     *0       0     1|0       0  40.1g  80.6g   565m    709 syslog:1.0%          0      39|0     1|0    41k   221k    42   16:37:26

..........

*0    992     *0     *0       0     1|0       0  40.1g  80.6g   954m    751 syslog:1.1%          0       0|0     1|0    58k   309k    42   16:38:12

*0    942     *0     *0       0     3|0       0  40.1g  80.6g   964m    759 syslog:0.9%          0       0|0     0|0    55k   294k    42   16:38:13

*0   1026     *0     *0       0     1|0       0  40.1g  80.6g   974m    813 syslog:0.8%          0       0|0     0|0    60k   319k    42   16:38:14

*0   1062     *0     *0       0     3|0       0  40.1g  80.6g   985m    826 syslog:0.8%          0       0|0     0|0    62k   331k    42   16:38:15

*0   1044     *0     *0       0     1|0       0  40.1g  80.6g   995m    800 syslog:0.9%          0       0|0     0|0    61k   325k    42   16:38:16

insert  query update delete getmore command flushes mapped  vsize    res faults   locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0   1005     *0     *0       0     3|0       0  40.1g  80.6g  1005m    785 syslog:0.7%          0      30|0     1|0    59k   313k    42   16:38:17

*0   1008     *0     *0       0     1|0       0  40.1g  80.6g  1015m    737 syslog:0.9%          0       0|0     1|0    59k   314k    42   16:38:18

*0   1137     *0     *0       0     3|0       0  40.1g  80.6g     1g    853 syslog:0.7%          0       0|0     0|0    67k   354k    42   16:38:19

*0    993     *0     *0       0     1|0       0  40.1g  80.6g  1.01g    768 syslog:0.9%          0       0|0     0|0    58k   310k    42   16:38:20

*0   1114     *0     *0       0     3|0       0  40.1g  80.6g  1.02g    811 syslog:1.0%          0       0|0     0|0    65k   346k    42   16:38:21

*0   1001     *0     *0       0     1|0       0  40.1g  80.6g  1.03g    744 syslog:1.0%          0      10|0     1|0    59k   312k    42   16:38:22

..........

*0   1892     *0     *0       0     1|0       0  40.1g  80.6g  2.03g    900 syslog:0.7%          0       1|0     1|0   111k   587k    42   16:39:44

*0   1881     *0     *0       0     3|0       0  40.1g  80.6g  2.04g    894 syslog:0.7%          0       0|0     0|0   111k   583k    42   16:39:45

*0   1927     *0     *0       0     1|0       0  40.1g  80.6g  2.06g    902 syslog:0.8%          0       0|0     0|0   113k   598k    42   16:39:46

insert  query update delete getmore command flushes mapped  vsize    res faults   locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0   1950     *0     *0       0     3|0       0  40.1g  80.6g  2.07g    912 syslog:0.6%          0      37|0     1|0   115k   605k    42   16:39:47

*0   2086     *0     *0       0     1|0       0  40.1g  80.6g  2.09g    901 syslog:0.8%          0       0|0     1|0   123k   647k    42   16:39:48

*0   1774     *0     *0       0     3|0       0  40.1g  80.6g   2.1g    846 syslog:0.8%          0       0|0     0|0   105k   551k    42   16:39:49

.......

*0   2589     *0     *0       0     1|0       0  40.1g  80.6g  2.56g    933  syslog:0.8%          0       0|0     1|0   152k   803k    42   16:40:18

*0   2289     *0     *0       0     3|0       0  40.1g  80.6g  2.58g    849  syslog:0.9%          0       0|0     0|0   135k   710k    42   16:40:19

*0   2523     *0     *0       0     1|0       0  40.1g  80.6g  2.59g    930  syslog:0.7%          0       0|0     0|0   148k   781k    42   16:40:20

*0   2636     *0     *0       0     3|0       0  40.1g  80.6g  2.61g    878  syslog:0.8%          0       0|0     1|0   155k   817k    42   16:40:21

*0   2509     *0     *0       0     1|0       0  40.1g  80.6g  2.63g    889  syslog:0.7%          0       0|0     1|0   148k   777k    42   16:40:22

*0   2637     *0     *0       0     3|0       0  40.1g  80.6g  2.65g    916  syslog:0.7%          0       0|0     0|0   155k   817k    42   16:40:23

*0   2575     *0     *0       0     1|0       0  40.1g  80.6g  2.67g    911  syslog:0.8%          0       0|0     0|0   151k   798k    42   16:40:24

*0   2516     *0     *0       0     3|0       1  40.1g  80.6g  2.68g    873  syslog:6.5%          0      16|0     0|0   148k   779k    42   16:40:25

*0   2498     *0     *0       0     1|0       0  40.1g  80.6g   2.7g    879  syslog:0.8%          0       0|0     0|0   147k   774k    42   16:40:26

insert  query update delete getmore command flushes mapped  vsize    res faults    locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0   2536     *0     *0       0     3|0       0  40.1g  80.6g  2.72g    872  syslog:0.7%          0       0|0     0|0   149k   786k    42   16:40:27

*0   2826     *0     *0       0     1|0       0  40.1g  80.6g  2.74g    959  syslog:0.8%          0       0|0     1|0   166k   876k    42   16:40:28

*0   2676     *0     *0       0     3|0       0  40.1g  80.6g  2.75g    925  syslog:0.8%          0       0|0     0|0   158k   829k    42   16:40:29

.......

*0   8934     *0     *0       0     1|0       0  40.1g  80.6g  4.85g   1088  syslog:0.6%          0       0|0     1|0   527k     2m    42   16:41:50

*0   9583     *0     *0       0     3|0       0  40.1g  80.6g  4.89g   1161  syslog:0.6%          0       0|0     2|0   565k     2m    42   16:41:51

*0   8982     *0     *0       0     1|0       0  40.1g  80.6g  4.93g   1107  syslog:0.6%          0      23|0     3|0   530k     2m    42   16:41:52

*0   9950     *0     *0       0     3|0       0  40.1g  80.6g  4.97g   1067  syslog:0.5%          0       0|0     0|0   587k     3m    42   16:41:53

*0   9580     *0     *0       0     1|0       1  40.1g  80.6g  5.01g   1084  syslog:0.7%          0       0|0     1|0   565k     2m    42   16:41:54

.......

*0  92475     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      1  syslog:0.0%          0       0|0    18|0     5m    28m    82   16:53:28

insert  query update delete getmore command flushes mapped  vsize    res faults    locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time

*0  92832     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    19|0     5m    28m    82   16:53:29

*0  92077     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       0|0    12|0     5m    28m    82   16:53:30

*0  93296     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.1%          0       0|0    18|0     5m    28m    82   16:53:31

*0  91269     *0     *0       0     3|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%          0       1|0    10|0     5m    28m    82   16:53:32

*0  93878     *0     *0       0     1|0       0  40.1g  80.7g  31.9g      0  syslog:0.0%

(0)

相关推荐

  • Mongodb实现的关联表查询功能【population方法】

    本文实例讲述了Mongodb实现的关联表查询功能.分享给大家供大家参考,具体如下: Population MongoDB是非关联数据库.但是有时候我们还是想引用其它的文档.这就是population的用武之地. Population是从其它文档替换文档中的特定路径.我们可以迁移一个单一的文件,多个文件,普通对象,多个普通的对象,或从查询中返回的所有对象 populate 方法 populate 方法可以用在 document 上. model 上或者是 query 对象上,这意味着你几乎可以在任

  • MongoDB查询操作限制返回字段的方法

    映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中要包含或者排除的字段.可以指定要包含的字段(例如:{field:1})或者指定要排除的字段(例如:{field:0}).默认_id是包含在结果集合中的,要从结果集中排除_id字段,需要在projection中指定排除_id字段({_id:0}).除了_id字段,不能在一个projection中联合使用包含和排除语意. 返回匹配文档的所有字段: 如果没有指定projection,fin

  • PHP中MongoDB数据库的连接、添加、修改、查询、删除等操作实例

    PHP 扩展mongon.mod.dll下载http://cn.php.net/manual/en/mongo.installation.php#mongo.installation.windows 然后php.ini添加 extension=php_mongo.dll 最后phpinfo() 查找到 表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器) 一.连接数据库 使用下面的代码创建一个数据库链接 复制代码 代码如下: <?php $conne

  • MongoDB下根据数组大小进行查询的方法

    注意:作者使用的mongodb版本为2.4.7. 首先插入测试数据 复制代码 代码如下: db.data.insert({name:'a', num:[12,123,22,34,1]});db.data.insert({name:'b', num:[42,22]});db.data.insert({name:'c', num:[49]}); 键num对应的值是数组. 查询num的数组值具有指定大小的document 最好的方法是使用$size,例如指定大小为2,可以: 复制代码 代码如下: db

  • MongoDB各种查询操作详解

    一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可以实现全部和部分查询. 1.查询全部 空的查询文档{}会匹配集合的全部内容.如果不指定查询文档,默认就是{}. 2.部分查询 3.键的筛选 键的筛选是查询时只返回自己感兴趣的键值,通过指定find的第二个参数来实现.这样可以节省传输的数据量,又能节省客户端解码文档的时间和内存消耗. 查询时,数据库所关心的查询文档的值必须是常量. 二.查询条件 1.比较查询 $lt,$lte,$gt,$gte,$ne和<,<

  • MongoDB查询技巧总结

    在MongoDB中db.collection.find()方法用于从集合中检索文档.db.collection.find()方法返回一个检索到文档的游标.db.collection.findOne()方法也执行读操作,返回一条文档.在内部实现上,db.collection.findOne()方法是db.collection.find()使用limit 1. 查询集合中的所有文档: 1.一个空的query文档({})可以查出一个集合中的所有文档: 复制代码 代码如下: db.inventory.f

  • mongodb实现同库联表查询方法示例

    前言 最近在工作中遇到一个问题,需要对mongodb数据库进行联表查询操作,发现网上这方面的资料较少,无奈只能自己来实现了,下面话不多说了,来一起看看详细的介绍: 注意:这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动,之后可能会联表查询) 我用到的联表查询有两种,一种是mongoose的populate,一种是$lookup 一.populate populate是使用外键关联子表 例如现在有一张订单表结构(动态外键): var orderSchema = new

  • 1亿条记录的MongoDB数据库随机查询性能测试

    mongdb性能压力测试,随机查询,数据量1亿条记录 操作系统centos6.4x64位 从测试结果看,当mongodb将数据全部载入到内存后,查询速度根据文档的大小,性能瓶颈通常会是在网络流量和CPU的处理性能(该次测试中当数据全部在内存后,纯粹的查询速度可以稳定在10W/S左右,系统load可以维持在1以下,由于此时CPU已经被使用到极限了,当并发再大时load值会直线飙升,性能急剧下降). 压力生成服务器与Mongodb服务器基本配置 cpu型号:Intel(R) Xeon(R) CPU

  • MongoDB数据库条件查询技巧总结

    目录 前言 连接数据库 查看数据仓库 查看数据库表 查看数据表内容 查询方式 总结 前言 今天不讨论使用自带 UI 界面的连接工具,仅讨论使用命令行查询 MongoDB 数据库的情况.在排查问题的时候,很多时候直接使用命令行更加方便.但是有一个前提,我们必须首先掌握 MongoDB 数据库命令行常用命令才行,本文以条件查询为例进行介绍. 连接数据库 首先,使用命令行连接数据库,命令如下: mongo 127.0.0.1:27017 输出如下结果表示连接成功: 查看数据仓库 查看数据仓库列表,命令

  • order by newid() 各种数据库随机查询的方法

    SQL Server: 复制代码 代码如下: Select TOP N * From TABLE Order By NewID()   view plaincopy to clipboardprint?Select TOP N * From TABLE Order By NewID() Select TOP N * From TABLE Order By NewID() NewID()函数将创建一个 uniqueidentifier 类型的唯一值.上面的语句实现效果是从Table中随机读取N条记

  • 浅析Python与Mongodb数据库之间的操作方法

    MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). 1. 安装Mongodb和pymongo Mongodb的安装和配置 Mongodb的安装教程请网上搜索, 安装完成后,    进行以下配置过程: 1.1 创建目录, 该目录为Mongodb数据文件的存放目录: *注: 本人使用的不是root用户, 所以修改目录的拥有者. * sudo mkdir /data sudo chown -R python:python /data mkdir /da

  • Mysql查询最近一条记录的sql语句(优化篇)

    下策--查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by create_time desc limit 1 这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时:limit是先取出全部结果,然后取第一条,相当于查询中占用了不必要的时间和空间:还有如果需要批量取出最近一条记录,比方说:"一个订单表,有用户,订

  • mongodb中随机获取1条记录的实现方法

    实现原理如下 1.先查询表中的记录总数 2.随机获取偏移量为0~总记录数-1 3.查询时skip偏移量,再获取1条记录 因本人测试环境php已升级到7.0以上,mongodb扩展使用支持php7.0以上的扩展,很多方法与php5.6不同.因此代码必须在php7.0以上运行.如果是php5.6环境,需要修改代码才能运行. 代码如下: function.php <?php // 连接mongodb function conn($host, $user, $passwd){ $server = 'mo

  • PHP实现在数据库百万条数据中随机获取20条记录的方法

    本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法.分享给大家供大家参考,具体如下: 额,为什么要写这个? 在去某个公司面试时,让写个算法出来,当时就蒙了,我开发过程中用到算法的吗?又不是大数据开发,分析. 今天偶然想起来一个坑爹数据,如:PHP取百万条数据中随机20条记录,当时就用的算法. 1.先统计统计数据库多少条记录(这个做个数据缓存,如1小时重新统计一次), 2.根据总条数,随机1次,1次性取出20条记录(当然这个就相当于分页了,要求不高的话,这个最快,我用的就是这个)

  • mongodb 随机获取一条记录的方法

    原理: 1.先查询表中的记录总数 2.随机获取偏移量为0~总记录数-1 3.查询时skip偏移量,再获取1条记录 因本人测试环境PHP已升级到7.0以上,mongodb扩展使用支持php7.0以上的扩展,很多方法与php5.6不同.因此代码必须在php7.0以上运行.如果是php5.6环境,需要修改代码才能运行. 代码如下: function.php <?php // 连接mongodb function conn($host, $user, $passwd){ $server = 'mongo

  • asp下sql和access数据库随机取10条记录的代码newid()

    MSSQL:select top 10 * from [table] order by newid() ACCESS: 复制代码 代码如下: '以利用rs.move嘛   '如随机取10条   n = 10   '先要判断总记录数是否少于10,若小于10,则有多少取多少 if n>10 rs.recordCount then n=rs.recordCount   dim ranNum   for i = 1 to n   Randomize()   ranNum = int(rs.recordC

  • php中通过数组进行高效随机抽取指定条记录的算法

    php使用数组array_rand()函数进行高效随机抽取指定条数的记录,可以随机抽取数据库中的记录,适合进行随机展示和抽奖程序. 该算法主要是利用php的array_rand()函数,下面看一下array_rand()函数的主要功能: array_rand-从数组中随机取出一个或多个单元 mixed array_rand(array $input[,int $num_req] ) array_rand()在你想从数组中取出一个或多个随机的单元时相当有用.它接受input作为输入数组和一个可选的

随机推荐