Google App Engine中的数据存储与云SQL

use*_*321 17 mysql database google-app-engine google-cloud-storage google-cloud-sql

我想构建一个服务于很多人(超过200万)的应用程序,所以我认为我应该使用Google Cloud Datastore.但是我也知道有一个选项可以使用Google Cloud SQL,但仍然可以为很多人使用mySQL服务(就像Facebook和Youtube所做的那样).

这是一个正确的假设使用数据存储而不是关系云SQL与这么多用户?先感谢您

Rob*_*t D 31

为了给出一个明智的答案,我需要了解更多有关您的应用程序的信息.但是......我将概述我发现的最大问题......

Google Datastore实际上是一个分布式分层数据存储.为了获得他们想要的可扩展性,必须有一些妥协.作为开发人员,您会发现这些都是易于解决,难以解决或无法解决的问题.后者远比你想象的要大.

如果您习惯于关系数据库以及在同一事务中跨多个表操作数据的能力,那么您可能会使用数据存储区来解决问题.最大的(?)问题是只在有限数量的实体组中支持交易(目前为5个).举一个简单的例子,假设您有一个简单的父子关系,并且您需要在事务中同时更新超过5个父项下的子记录...无法完成(是的,真的).如果您重新组织数据结构并尝试将所有以前的子记录放在单个实体下,以便可以在单个事务中更新它们,您将遇到另一个限制...您无法可靠地更新相同的事实实体组每秒不止一次(是的,真的).如果你在父节点之间查询实体类型而没有指定每个实体的根实体,你会得到委婉地称为"最终一致性"的东西......这意味着它不是(是的,真的).

以上内容都在Google的文档中,但如果您刚开始使用它(当然它可以处理它!),您可能会对它进行掩饰.

  • 请注意,限制已更改,这可能会有所帮助,例如:事务中现在可以访问的实体组的最大数量为25。您可以在以下位置找到最新的限制:https://cloud.google.com / datastore / docs / concepts / limits (2认同)

Mar*_*nds 19

Facebook和YouTube使用MySQL将其大部分内容提供给大多数用户并不严格.它们主要使用非常大的NoSQL存储(Cassandra和BigTable)来实现可伸缩性,并且可能将MySQL用于需要更复杂的关系存储的小规模工作.如果可以,尝试使用数据存储,因为您可以免费启动,并且在处理大量数据时也可以节省资金.


小智 9

这取决于你对"很多人"的意思,你拥有什么样的数据,以及你想用它做什么.

Cloud SQL专为需要SQL数据库的应用程序而设计,该数据库可以处理您可以在SQL中编写的任何查询,并确保您的数据始终处于一致状态.

Cloud SQL最多可以提供3200个并发查询,具体取决于层.如果查询很简单并且可以从RAM提供,它们应该只需几毫秒,并假设您的用户每秒发出大约1个请求,那么它可以支持数万个同时活跃的用户.但是,如果他们正在进行更复杂的查询,如搜索或编写大量数据,那么它就会更少.

如果您有一组简单的查询,不太关心立即的一致性,或者期望更多的流量,那么您应该查看数据存储区.

  • 随着数据量的增加,分布式键值系统(如Datastore)的效率在速度和成本方面将越来越高.这不仅适用于AppEngine,也适用于Azure和其他云平台,请查看.如果你的意思是200万人,每人拥有5万个实体,那将是1000亿个实体,绝对有利于数据存储.如果你的意思是200万人共享相同的5万个实体,那么SQL是可行的,你可以使用Memcache来提高性能.但是,无论如何,Memcache更像是数据存储而不是SQL. (3认同)