Я собираюсь создать службу GPS-слежения, используя Django, Python и MongoDB. Таблицы/документы транспортных средств будут создаваться динамически при активации, в них будут храниться данные GPS, поступающие с устройств через TCP-соединение (приблизительно мы сохраним емкость для 10000~100000 устройств, отправляющих данные в минуту) с использованием Twisted Framework. Поэтому в сложившихся обстоятельствах я хотел знать, стоит ли динамически создавать этот документ. Если можно, подскажите схему. Я предлагаю один здесь:
class Device_<id>(Document):
time_of_data = DateTimeField()
location = GeoPointField()
speed = DecimalField()
bearing = DecimalField()
sensor = StringField()
class DeviceOwner(Document):
user = ReferenceField(User)
device = StringField() #This will store the name of the Device_<id>
Другой вариант - поместить все местоположения в один документ, который, я не уверен, сможет выдержать нагрузку или пул соединений, или даже если это произойдет, будет ли индексация работать с поддокументами или нет. В таком случае конструкция может быть:
class Device(Document):
user = ReferenceField(User)
name = StringField()
class DeviceData(Document):
time_of_data = DateTimeField()
location = GeoPointField()
speed = DecimalField()
bearing = DecimalField()
sensor = StringField()
device = ReferenceField(Device)
*Новое изменение* от 4 февраля:
Другой возможный дизайн таблицы, который я рассматриваю, заключается в том, что loc в основном представляет собой данные BSON.SON(), содержащие значения «x» и «y»:
device_locations = {"device":device[0]["_id"],
"locations":{
"time":datetime.now(),
"loc":loc,
"status":"A",
"engine_sensor":True,
"ac_sensor":True,
"temperature_sensor":0.0,
"door1_sensor":False,
"door2_sensor":False,
"door3_sensor":False,
"door4_sensor":False,
},
"active":True,
"created_on":datetime.datetime.now(),
"modified_on":datetime.datetime.now(),
"created_by":user,
"modified_by":user
}
Другой вариант - иметь отдельную коллекцию для каждого устройства (кстати, если приведенный ниже код является представлением этого или нет):
device_locations = {
"%s"%device[0]["_id"]:{
"time":datetime.now(),
"loc":loc,
"status":"A",
"engine_sensor":True,
"ac_sensor":True,
"temperature_sensor":0.0,
"door1_sensor":False,
"door2_sensor":False,
"door3_sensor":False,
"door4_sensor":False,
},
"active":True,
"created_on":datetime.datetime.now(),
"modified_on":datetime.datetime.now(),
"created_by":user,
"modified_by":user
}