首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何始终从读取最近的实体

如何始终从读取最近的实体
EN

Stack Overflow用户
提问于 2017-11-19 22:42:00
回答 2查看 861关注 0票数 3

据我理解,允许我在没有任何时间限制的情况下编写新条目,但限制了更新实体的频率。此外,索引并不是很一致的。

我正在快速地将与单个气象站相关的新传感器数据写入数据存储。该实体还包含一个时间戳。按气象站和时间戳对传感器读数进行索引排序。

现在的目标是始终将最近的值返回给请求特定气象站当前值的用户,但是由于索引最终是一致的,所以返回的值可能不是最近的值。

有什么想法吗?在Google上,架构看起来会是什么样子?它总是返回最近的值,而不冒在单个实体上达到写限制的风险?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-20 05:35:52

在一个实体组中编写来自一个站点的所有数据并使用祖先查询的另一种方法是将传感器读数作为单独的新实体写入,并重写一个(小型)知名实体,该实体包含最新读取实体的关键。

要获得最近的度量,您只需从著名的实体获取其键,然后通过键查找获得该实体-始终一致。

您仍然只限于以每秒不超过一次的速度编写示例(平均而言),但至少这种方法是:

  • 不使用祖先,因此可以避免当前拥有的大型每个站点实体组,这些组可能导致争用,请参阅保持实体组小
  • 不使用数据存储查询。
  • 不需要索引,从而避免了当前存在索引单调递增时间戳属性的热点问题(请参阅较高的读/写速率到一个狭窄的键范围)
  • 不受读数样本大小的影响,只有小的、固定大小的知名实体才会被重写。

如果您真的需要每秒写入一个以上的传感器读数,您可以尝试:

  • 对多个知名实体使用切分策略(最多25个--这是可以在跨组事务中访问的最大实体组数),其中包含写入数据存储的最近读取的键。您必须在一个事务中阅读所有这些信息,并选择一个具有最新时间戳的
  • 使用memcache代替著名的实体--因为memcache允许更高的写入率,因此很容易重写。但你需要接受这样一种可能性,即内存缓存偶尔会失败,您将不得不求助于一些基于查询的回退故事来恢复,在此期间,您可能会返回一些并不是最新的读数(或者在这些期间继续返回错误是可以接受的?)
票数 3
EN

Stack Overflow用户

发布于 2017-11-20 02:25:41

试着阅读:

https://cloud.google.com/datastore/docs/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore/

基本上,使用一个祖先查询,然后您的查询将非常一致--您将能够查询最新的更新。

支持每个实体组每秒写一次。只要每个气象站每秒钟给其实体组写不到一次,你就没事了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47382792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档