谷歌云数据存储。如何服务数据?

Posted

技术标签:

【中文标题】谷歌云数据存储。如何服务数据?【英文标题】:Google Cloud DataStore. How to serve data? 【发布时间】:2016-04-29 00:12:56 【问题描述】:

和许多人一样,我对 NoSQL 世界并不陌生。我做了很多研究,但我仍然只缺少一点,我找不到正确的答案。

系统简介:

我正在构建一个系统,用于收集不同网站上的访问者数据。每次访问都是数据存储中的一个实体,具有设备类型、IP、访问时间等属性。

数据存储区将有数百万次访问。

我的问题是如何将这些数据提供给客户。我的数据在数据存储中设置为“访问”实体。

现在,当客户登录时,我不想向他们展示数百万条记录。例如,我想向他们展示一般统计数据。比如移动设备上的访问次数、某个时间范围内来自特定国家/地区的访问次数等等。

现在,由于我是 NoSQL 数据库的新手,我不确定应该如何在客户的仪表板中显示这些统计信息。

据我所知,Datastore 不支持聚合,例如获取查询结果的计数。

我查看了 BigQuery,但 BigQuery 适用于 Datastore“备份”,我需要实时提供数据,而无需手动进行备份。

我还阅读了有关计数器和分片计数器的信息,这是正确的方法吗?每个跟踪组的每个属性的每个客户都有一个计数器?并以这种方式显示总数?对于一个简单的目的来说,这听起来太多了。

任何可以让我朝着正确方向前进的意见或解释都将受到高度赞赏。

最好的问候

【问题讨论】:

您可以将数据流式传输到 bigquery,Datastore 可能不适合进行复杂分析 我想总结一下。如果我只需要 count aggr 函数,我可以使用 GAE “datastore statistics api”。但如果我需要做更多的事情,更多的聚合函数和更复杂的实时查询,我想我需要 BigQuery(并将数据从 Datastore 流式传输到它)? 好吧,只是使用 bigquery,从你的解释来看,我认为你不需要将数据放入数据存储区,只需 bigquery 我不认为数据存储对于您想要完成的任务来说是一个好的存储机制。云平台有谷歌搜索API,它允许分面,但即使是这种机制也已经落后于时代。您是否考虑过使用弹性搜索? elastic.co/products/elasticsearch @marcadian 我需要从另一个来源(如 Datastore/Cloud Storage cloud.google.com/bigquery/loading-data987654322@)将数据加载到 bigQuery 【参考方案1】:

是的,就性能而言,计数器是解决您的问题的好方法。但它们确实有一些缺点,例如存储大小以及每次您想要引入一种新的统计数据类型时,您都需要为其创建一个计数器。

除了您当前的“访问”实体之外,您还可以选择将聚合数据存储在数据存储区的分片计数器中。这些计数器可以实时更新,也可以通过您的任务队列之一中的任务进行更新。创建一个任务来为当前的访问实体创建各种计数器是相当简单的。

分片是一种创建多个“基础”实体的方法,这些实体在组合时代表一些有意义的数据。进行分片以确保不会因并发更新而导致性能问题。

来自Google Documentation:

如果你有一个单一的实体是计数器和更新率 太快了,那么你会在序列化写入时发生争用 会堆积起来并开始超时。解决这个问题的方法是 如果你来自关系型,有点违反直觉 数据库;该解决方案依赖于从应用程序读取的事实 引擎数据存储非常快速且便宜。减少的方法 争用是建立一个分片计数器 - 将计数器分成 N 不同的计数器。当你想增加计数器时,你选择 随机分片之一并增加它。当你想知道 总计数,您读取所有计数器碎片并总结它们 个人计数。您拥有的分片越多,吞吐量就越高 你的柜台上会有增量。该技术适用于 不仅仅是计数器,学习的一项重要技能是 通过大量写入发现应用程序中的实体 然后找到好的方法来分片。

我建议您查看链接以获取更多信息和一些有用的示例。

【讨论】:

我发现这是正确的答案。尽管我决定使用 BigQuery,因为我发现它更简单直接,因为我来自关系数据库,但这不是最好的解决方案,因为查询花费的时间比我想要的要长。对于这种体积(和所需速度)的实时数据显示,我发现这是适合这种情况的解决方案。谢谢。【参考方案2】:

据我所知,Datastore 不支持聚合或获取计数 例如查询结果。

这不是真的。您可以使用一行代码获取查询返回的多个实体。查询本身可以是key-only,速度非常快,而且基本上是免费的。

【讨论】:

如果你有很多实体,速度并不快。你拥有的实体越多,它变得越慢。您还需要考虑网络,而不仅仅是操作本身。

以上是关于谷歌云数据存储。如何服务数据?的主要内容,如果未能解决你的问题,请参考以下文章

Python:在谷歌云数据存储模拟器中保存数据

如何在谷歌云存储中启用实时对象访问分析?

从谷歌云存储中的 csv 加载数据作为 bigquery 'in' 查询

谷歌云存储/大查询成本估算

如何将数据附加到谷歌云存储上的文件

如何使用多个工作人员加快批量导入谷歌云数据存储的速度?