2

我正在尝试重新格式化我在这里以更有意义的方式提出的先前问题。如果我没有提出正确的问题,或者没有提供足够的信息,请告诉我。

我有来自以下格式的 Pi 的数据,我想要一种有意义的方式来表示数据存储区 (ndb) 中的数据,以在数据到达时限制我的写入,并限制我需要进行的查询数量找到放置数据的正确位置(又名区域):

数据是这样的:

{'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 地址找到读数应该关联的“区域”,然后我需要使用区域查找关联的传感器(看起来很复杂),然后将传感器(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 和值)

所以我需要寻找它们所属的区域,以及它们映射到的传感器,以便以后搜索它们。

我做了很少的数据库建模,所以我不知道如何为此建模。我可以创建新模型并使用关键属性引用它们,或者创建结构化属性并查询这些属性(消除传感器模型),但在查找后仍然需要进行读数和读数。

任何帮助深表感谢。

是的,我已经阅读了ndb 属性按结构化属性过滤查询以及一些类似的 SO 帖子,例如这篇文章

4

1 回答 1

2

我猜使用 StructuredProperty 会节省少量的写操作。不过,我建议的是弄清楚哪些属性不必被索引并使用选项 indexed=False 声明它们。正如文档中所述,“未索引的属性比索引的属性花费更少的写入操作。”,根据经验,我可以告诉您,您可以通过这种方式真正节省大量的写入操作。

于 2013-05-02T00:33:32.300 回答