我正在尝试重新格式化我之前以更有意义的方式提出的问题。如果我没有问正确的问题,或者没有提供足够的信息,请告诉我。
我有来自Pi的数据,该格式采用以下格式,我想要一种有意义的方式来表示数据存储区(ndb)中的数据,以限制我到达时的写入次数,并限制我需要的查询数量找到正确放置数据的地方(又名Zone):
数据如下:
{'rssi':'*','source_addr':' 87:ea:66:be:19:d9 ', 'id':'rx_io_data','samples':[{'adc-0':253,'adc-1':2},{' adc-0': 252,'adc-1':2 },{'adc-0':252,'adc-1':2},{'adc-0':253,'adc-1': 1},{'adc-0':252,'adc-1':2}],'选项':'\ x00'}
我突出了重要的信息(我不需要用于放入数据的代码。更适合我的模型的结构)..
所以我将使用MAC地址来找到与读数相关的“区域”,然后我将需要使用Zone来查找相关的传感器(似乎是复杂的),然后映射传感器(adc-0,adc- 1)它是人类可读的映射(温度或心脏监测器)。我想保留总读数和各个传感器读数,以便以后我可以查询所有区域或每个区域的所有心脏监测传感器......
到目前为止,我有这个似乎令人费解并且需要大量查询和放置的内容:
class Sensors(ndb.Model): # parent Zone
sensorname = ndb.StringProperty(required=True) # Heart, Temp
sensorpin = ndb.StringProperty(required=True) # adc-0, or adc-1 ...
class Zone(ndb.Model):
zname = ndb.StringProperty(required=True) # Name of zone like "Room# or Patient#"
zonemac = ndb.StringProperty(required=True) # MAC of network adapter
homekey = ndb.KeyProperty(kind=Home, required=True)
datecreated = ndb.DateTimeProperty(auto_now_add=True)
class Readings(ndb.Model): # parent Zone
datecreated = ndb.DateTimeProperty(auto_now_add=True)
alldata = ndb.JsonProperty(required=True) # store all the readings in json for later debug
class Reading(ndb.Model): # parent is Sensor or zone ? individual sensor readings ?
readingskey = ndb.KeyProperty(kind=Readings, required=True) # full reading
value = ndb.IntegerProperty(required= True ) # or 0
name = ndb.StringProperty(required = True) # Heart sensor, temp sensor,... )
潜在选项:
class Sensors(ndb.Model):
sensorname = ndb.StringProperty(required=True) # Heart, Temp
sensorpin = ndb.StringProperty(required=True) # adc-0, or adc-1 ...
class Zone(ndb.Model):
zname = ndb.StringProperty(required=True) # Name of zone like "Room# or Patient#"
zonemac = ndb.StringProperty(required=True) # MAC of network adapter
homekey = ndb.KeyProperty(kind=Home, required=True)
sensors = ndb.StructuredProperty(Sensors, repeated = True) #sensors you can get sensor name but how do you map to adc-0 or whatever
datecreated = ndb.DateTimeProperty(auto_now_add=True)
class Readings(ndb.Model): # parent Zone
datecreated = ndb.DateTimeProperty(auto_now_add=True)
alldata = ndb.JsonProperty(required=True) # store all the readings in json for later debug
individualreading = ndb.StructuredProperty(Reading, repeat=True)
class Reading(ndb.Model): # parent is Sensor or zone ? individual sensor readings ?
readingskey = ndb.KeyProperty(kind=Readings, required=True) # full reading
value = ndb.IntegerProperty(required= True ) # or 0
name = ndb.StringProperty(required = True) # Heart sensor, temp sensor,... )
技巧是我从设备获得的是MAC和传感器映射(ADC-0,ADC-1和值)
所以我需要寻找他们所属的区域,以及他们映射到的传感器以便以后搜索它们。
我做了很少的数据库建模,所以我不知道如何为此进行建模。我可以创建新模型并使用关键属性引用它们,或者创建结构化属性并查询(消除传感器模型),但仍然需要在lokups之后执行读数和读取。
非常感谢任何帮助。
是的,我已经阅读了ndb properties和Filtering queries by structured properties以及一些类似的SO帖子,例如one.
答案 0 :(得分:2)
我猜使用StructuredProperty可以节省少量的写入操作。我建议的是确定哪些属性不必索引,并使用indexed = False选项声明它们。正如documentation所述,“未编制索引的属性比索引属性花费更少。”根据经验,我可以告诉您,这样可以真正节省大量的写操作。