【发布时间】:2016-04-28 22:53:05
【问题描述】:
我最近一直在不停地做很多研究。我知道这是一个模糊的问题,但我会尽可能具体。我一直在开发中小型 Web 系统,但从来没有处理过 noSQL 数据库,也没有做过这种规模的东西。这个问题的目的是做出正确的决定,因为我不想在脚上开枪。希望它可以帮助像我这样的其他人,这是新手,一个具体的例子可以澄清更多的事情 在我看来。
为了使这更容易,我将给出一个非常接近我想要实现的示例,它非常简单并且涵盖了许多类似的系统。希望通过这个示例,我将清楚我正在处理的数据类型、系统类型以及需要执行的操作。
示例系统概述
1) 系统概述:假设我们正在处理一个多租户系统,该系统允许用户跟踪其网站上特定页面的流量。用户/客户需要将我的系统代码植入他们的页面,并且此代码将调用我的服务器上的服务,该服务仅将数据存储在数据库中。数据只是页面访问者的数据,例如他们访问的页面、浏览器、设备、访问时间等。在这里,数据已存储
2) 用户/客户可以登录系统,查看他们的数据。这里的数据是SERVED
3) 除了存储和提供数据之外,系统中还有另一个服务将处理这些数据。并找到有关网站访问者的模式/结论。例如,通过移动设备访问特定页面的次数更多..(并根据此结论做任何事情)。这里的数据是PROCESSED
4) 我们谈论的是大量数据。可能从每天 3-4 百万次写入(访问)开始,我想确保它可以扩展到十亿以上
问题 1:
现在,我一直在为 Google Cloud 解决方案而苦恼。我认为最好使用 App Engine,因为我负担不起维护虚拟服务器的费用。我决定使用 DataStore,我的问题来了:
1) DataStore 是最适合这种情况的解决方案吗?
根据我的研究,我发现数据存储是最合适的,但由于缺乏经验,我当然不是 100% 有信心。但我之所以选择这个,是因为我经常使用 SQL。我没有选择 Cloud SQL,因为我的数据不是那么相关,而且由于系统的容量和对可靠性和可扩展性的需求,我认为 NoSQL 解决方案会更好。 Datastore 具有 GQL 语法,类似于 SQL 查询语言。对象的属性也被索引。例如,我可能需要按设备类型读取/过滤数据。我还看到 BigTable 非常不同(可能不习惯),你拥有的所有数据都是 Key:Value,我认为不可能/很难通过特定属性查询?
尽管我不相信我的数据是真正结构化的。特别是我将为用户/客户(多租户)使用命名空间,它会自动包含在密钥中。我目前拥有的实体是 User(可能会在其下包含几个实体),而 Visit 作为“独立”实体。
问题 2
向客户提供数据的最佳做法是什么?
我不想向客户展示数百万次访问。我会给他们总体统计数据。例如通过 Android 移动设备访问的次数。或时间范围内的统计数据。所以我相信有两种方法。首先,制作单独的数据库。或者可能是同一 DataStore 中的单独实体,它包含每个客户的每日总统计信息。然后通过添加感觉不对的“天数统计”来提供服务。其次,每次我想提供数据时,我都会查询一个大数据库。但第二种方法也感觉不对。因为据我所知,Datastore 没有“分组依据”等功能,也没有聚合功能。所以每次,客户都想“按设备”查看统计信息,我需要通过内存上的代码来实现“分组依据”功能吗?或者如果我只想显示特定过滤器查询结果的“计数”,我相信数据存储不直接支持?在提供数据时还要实时进行这些计算听起来很多。
现在我知道 Google 有一个名为 BigQuery 的解决方案,我相信它可以满足我的需求,并允许我以高度的灵活性和效率为客户提供我想要的数据,但据我所知,它仅适用于数据存储“备份” ,我需要实时提供数据。
我非常感谢任何抽出时间就此事提供意见的人。非常感谢您。
【问题讨论】:
-
通过正确的应用设计可以实现可扩展性。但是您说
I can't afford to maintain a virtual server- 这可能是一个问题:当“大规模”开始时,GAE 成本可能会变得非常重要,通常远高于常规 VM 的成本(您为可扩展的 PaaS 便利性付出了代价)。事实上,据报道,切换到 VM 是降低大型应用程序成本的一种方法。所以我会从这里开始cloud.google.com/appengine/pricing。 -
好吧,如果我不支付给 Google,我将不得不支付给其他人来为我维护/管理它。正如我所说,我没有足够的经验,但据我研究,我知道数据库设计是更大的因素。无论哪种情况,我都会考虑您的观点并进一步调查。但无论哪种方式,我都需要对数据库设计做出决定。如果我要使用 VM 或 App Engine。
-
另外,问题的目的是澄清有关在 NoSQL 数据结构中处理大型数据集(选择正确的数据库,以及如何实时服务),无论我是否要使用 App引擎或计算引擎。
-
您的帖子可能因离题而被关闭 - 过于宽泛/基于意见。但是那里有大量相关的帖子:stackoverflow.com/search?q=[gae-datastore]+scale.
-
我在 17 年前创办了我的第一家软件公司——当然是服务器 + SQL 数据库。除了像 App Engine 这样的 PaaS 之外,我永远不会在其他任何东西上启动任何新项目(任何规模)(或者只有在我必须的时候才使用 IaaS,例如,App Engine 不支持文件流式传输)。如果你做得对,你甚至可以保持在免费配额内,直到你的项目真正起飞。
标签: database google-app-engine design-patterns google-cloud-datastore nosql