我正在考虑将MongoDB用作时间序列数据库。一旦我知道,我的应用程序将需要能够及时返回并填补时间序列数据中的空白。例如,我可能有1,2,3,6的数据。在报告时间10之后,我可能需要插入数据4,5,6。将插入数据是否实用或将遭受需要使用慢/复杂操作会对性能造成重大影响?使用相同(或可能是新的)值更新时间6是否简单,或者是否需要不同的操作来插入新数据然后更新现有数据?
答案 0 :(得分:0)
使用更新和upsert标志很容易完成(MongoDB太棒了!)。 下面是一些示例python代码。
import time
import datetime
import random
import csv
import os
import zipfile
import json
import pymongo
from pymongo import Connection
client = Connection('localhost')
db = client.pan2
collection = db.well1
maxloop = 10000
x = 1
y = random.randint(100,999)/random.randint(1,10)
v1 = 'value'+str(random.randint(1,10))
v2 = 'value'+str(random.randint(1,10))
v3 = 'value'+str(random.randint(1,10))
elaptime = time.clock()
while maxloop > 0:
collection.update({'timestamp': x}, {'$set': {'value1':y, v1 : y/2, v2 : y/4}}, upsert=True)
maxloop = maxloop - 1
x = x + 1
elaptime=elaptime-time.clock()*-1
print("Processing time was", elaptime, "seconds")