【发布时间】:2017-10-28 06:38:34
【问题描述】:
我正在考虑使用表存储(如 Azure、Google 或 Apache HBase 类型)来存储实体/行,但我在网上找不到任何关于我的使用模式的帮助。它是这样的:
- 实体具有 ID 或密钥,例如“UserId”
- 日期值,例如“StartedUsingProduct”
- 日期值,例如“StoppedUsingProduct”
查询的类型主要是“在日期 T,查找所有使用该产品的用户”。请注意,同一个 UserId 将有许多(数千)个开始/停止对。
在 Azure 案例中, - PartitionKey 是 UserID - RowKey“StartedUsingProduct” 但是如果不进行完整的分区扫描,我就找不到合适的查询方式。
在 Google 的案例中,按照他们的建议, - 键类似于“UserID_StartUsingProduct”, 当我必须检索大量行然后使用第二个属性过滤掉时,我会遇到同样的问题。
有人对如何攻击这种特定的使用模式有一些见解吗?
【问题讨论】:
-
这是相当广泛的 - 没有一个单一的“正确的表格排列。我建议 1)你让这个更具体 - 显示你正在运行的查询,以及你遇到的问题和 2)分开你的问题. 现在,您标记了两个完全不同的云提供商/表存储服务。
-
我不同意你的看法。 Azure 表存储和 Google 大表本质上是一回事,只是 Azure 将行键拆分为两部分略有不同,谷歌建议将两部分连接成一个键。它们都是 NoSql,键值存储,查询在直接点击一个键或一系列键时进行了优化。它们都可以有任意数量的列,并且这些列可以从一行更改为另一行。
-
至于 1) 显示查询,它已经存在,以 粗体。这是目前唯一值得关注的问题。
-
澄清一下:您是否仅在用户“开始”或“停止”使用该产品时获得更新?您是否没有收到用户仍在使用该产品的每日“ping”?因此,例如,如果用户在 1 月 1 日开始使用该产品,并在 12 月 31 日停止使用,但在 7 月 5 日,如果您提出问题,它应该能够找到 1 月 1 日的“开始”标记并且没有现有的停止标记,并因此得出结论该用户仍在使用该产品?
标签: azure azure-table-storage google-cloud-bigtable nosql