Ще създам услуга за 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
}