股票交易記錄到mongodb
1. 向mongodb里插入10萬條記錄的代碼怎麼寫
起初打算用Node.js去做這個性能 測試,碰了幾次壁後,改用Python順利完成任務,現在回過頭來再看這個問題,發現裡面似乎有坑。
先放上一段Node.js的插入10萬條記錄的代碼:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://127.0.0.1:27017/testdb';
var dataList = []
var globalCount = 0
console.time('insert,10w');
MongoClient.connect(url, {
server: {
poolSize: 50
}
},function(err, db) {
if(err) throw(err)
for(var i=0; i<100000; i++){
db.collection('test1').insert({
count:i
}, function(err, r) {
if(err) throw(err)
globalCount++
if(globalCount>=100000){
console.timeEnd('insert,10w');
process.exit(1);
}
});
}
});
測試結果慢的令人發指,Node.js版本是最新的0.12.2
E:\nodejs>node mongodb_error2.js
insert,10w: 9791ms
我用同樣的Python腳本去做:
import pymongo
import json
import datetime,time
import
import sys, os
def getTimestampFromDatetime(d=None):
if d is None:
d = datetime.datetime.now()
return time.mktime(d.timetuple())
if __name__ == '__main__':
start = getTimestampFromDatetime()
client = pymongo.MongoClient("localhost", 27017, max_pool_size=50)
db = client.testdb
saveData = []
for i in range(0, 100000):
saveData.append({
'count':i
})
db.test2.insert(saveData)
end = getTimestampFromDatetime()
print('time: {0}s'.format(end-start))
測試結果如下:
E:\python>python save_10w.py
time: 1.0
我在想是不是Node.js代碼寫的太垃圾,於是我找了Mongodb包的另外一個insertMany方法,但是結果卻報錯了:
E:\nodejs\node_moles\mongodb\lib\utils.js:97
process.nextTick(function() { throw err; });
^
Error
at Object.<anonymous> (E:\nodejs\node_moles\mongodb\node_moles\mongodb-c
ore\lib\error.js:42:24)
at Mole._compile (mole.js:460:26)
at Object.Mole._extensions..js (mole.js:478:10)
at Mole.load (mole.js:355:32)
at Function.Mole._load (mole.js:310:12)
at Mole.require (mole.js:365:17)
at require (mole.js:384:17)
at Object.<anonymous> (E:\nodejs\node_moles\mongodb\node_moles\mongodb-core\index.js:2:17)
at Mole._compile (mole.js:460:26)
at Object.Mole._extensions..js (mole.js:478:10)
2. 怎麼從mongodb讀取數據java
從Mongodb讀取數據,這個和從RDS關系型資料庫讀取數據原理應該是一樣的;
簡單的可以通過Spring提供的MongoTemplate去實現這個功能;
舉個例子,查找某一條記錄:
publicTfindOne(Criteriacriteria,Sortsort,String[]fields){
DBObjectfd=fields2DBObject(fields);
Queryquery=newBasicQuery(newBasicDBObject(),fd);
query.addCriteria(criteria);
if(sort!=null)
query.with(sort);
returnthis.mongoTemplate.findOne(query,entityClass);
}
/**
*如果是隱藏則首個元素為'$exclude'字元串
*
*@paramfields
*@return
*/
(String[]fields){
DBObjectresult=newBasicDBObject();
if(fields!=null){
intvisible=fields[0].equalsIgnoreCase("$exclude")?0:1;
intstart=visible==0?1:0;
for(inti=start;i<fields.length;i++)
result.put(fields[i],visible);
}
returnresult;
}
3. 如何排序在MongoDB中收集記錄中數組
您將需要處理應用程序中的code中的嵌入式陣列,或使用新的 MongoDB中2.2聚合框架
在蒙戈 Shell實例聚集:
db.students.aggregate(
//初始文件匹配(採用指數,如果有合適的可用)
{$匹配:{
_id:1
}}, //展開得分數組的文件流
{$開卷:'$得分「}, //篩選器'功課'分數
{$匹配:{
「scores.type':'功課'
}}, //排序按降序排列
{$排序:{
「scores.score':-1
}}
)
示例輸出:
{
「結果」:
{
「_id」:1,
「名」:「梅嫩德斯奧里利亞」
「算賬」:{
「類型」:「功課」,
「分數」:71.76133439165544
}
},
{
「_id」:1,
「名」:「梅嫩德斯奧里利亞」
「算賬」:{
「類型」:「功課」,
「分數」:34.85718117893772
}
}
]
「確定」:1
}
4. Mongodb存儲用戶歷史數據,時間軸展示,怎麼查詢效率高
可以考慮用mongodb的固定集合存儲,不過固定集合不允許修改和刪除,也只能存儲你設定大小的數據,有一定的限制,但是查詢非常快,而且都是有序的。
或者你用普通集合存儲,按時間和用戶ID建立復合索引,這樣查詢的時候效率會提高不少,像這種日積月累的數據,最好有個分割線的存儲機制,不常查詢到的數據應該存儲在其他表裡,常常需要檢索的數據應該單獨存儲,因為不是所有的用戶每次都需要查詢所有的歷史記錄,先就這些吧,歡迎補充更好的方法。
5. linux怎麼查詢mongodb的操作記錄
db.msgall.find({"code":"批次號1","status":"0"} ,{code:1,cid:1,content:1,status:1});
db.msgall.find({"code":"批次號2","status":"0"} ,{code:1,cid:1,content:1,status:1});
db.msgall.find({"code":"批次號3","status":"0"} ,{code:1,cid:1,content:1,status:1});
exit;
6. Mongodb 如何做到在只保留最新的50條記錄
MongoDB有兩種集合能實現比較類似的功能。
一種是TTL(Time To Live)集合,mongod會自動刪除過期的文檔。
另一種是capped集合,該集合是一個固定大小的集合,當該集合存滿數據時,mongod會自動通過覆蓋最舊的文檔來存放新的文檔。
7. mongodb 檢索 1000萬條記錄 需要多少時間
cursor.count和cursor.skip。
但是mongodb不保證數據的順序,如果你需要的是最新加入資料庫的那一條doc,你最好在doc里加一個時間來記錄存入資料庫的時候,然後根據這個時間來排序。
8. mongodb查詢為什麼只能查詢到一條記錄
List<DBObject> list = collection.find($where).toArray();
不對·
結果集 = 載體.executeQuery(sql);
9. 怎麼將mongodb裡面的sql操作記錄下來
准備
在此之前,我們先在我們的資料庫中插入10萬條數據。數據的格式是這樣的:
?
1
2
3
4
5
6
{
"name":"your name",
"age":22,
"gender":"male",
"grade":2
}
explain
explain方法是用來查看db.collecion.find()的一些查詢信息的。例如:
?
1
db.collectionName.find().explain()
explain方法有個可選的參數verbose,是個字元串,他表示的是verbose的模式。一共分為3種模式:
queryPlanner:默認參數,詳細說明查詢優化器選擇的計劃並列出