2012-12-21 59 views
1

我正在寻找为我的跨数据运行DynamoDB数据库并为需要SQL Join Queries的数据运行mysql数据库。AWS数据库结构 - MySQL和DynamoDB

为了尽量保持MySQL大型/大型表(保持性能更好),我将把一些数据移动到DynamoDB中,有时需要引用MySQL中的数据。

查询DynamoDB的某些数据和查询MySQL,然后使用PHP(或另一种服务器端语言)执行最终数据比较以获取所需数据返回到客户端/浏览器时,编程/查询是不是很差?

我想基本问题是:必须查询SQL数据库,然后将结果在PHP(或服务器端语言)中... ...这是正常还是坏主意?

THX

注:这个主要目的是数据库规划,以避免无法管理过大型关系型数据库的情况。因此,要批量数据移动到的NoSQL(DynamoDB)...

回答

4

将数据分离到不同的数据存储区是非常好的主意,每个存储区都有其优点。

例如:

  • 你可以把BLOB在你的RDBMS(如MySQL的),但最好是在一个存储为Amazon S3
  • 您可以将文本文档放入RDBMS中,并用“... LIKE%QUERY%...”查询它们,但最好将它们放在弹性搜索或Amazon CloudSearch中。
  • 你可以把你的会话管理数据在RDBMS中,但最好是在Amazon Elastic CacheDynamoDB
  • 您可以在RDBMS的查找表,但最好是在内存或基于NoSQL的内存(如Memecached或Redis)或DynamoDB

而且,您可以不同地编写上述语句,将所有内容存储在MongoDB或DynamoDB中,但宁愿将它们放在其他地方。

当您将数据放入不同的存储区时,根据与数据类型和此数据使用情况相关的此数据存储的简单性,您可以获得更简单,分布式,可扩展且通常更快的系统。

缺点是您需要在数据存储间同步您的数据。一旦向DynamoDB添加记录,您需要将BLOB上传到S3,在CloudSearch中更新文档并将记录添加到MySQL中,并将相关行写入日志文件以供将来分析。当然,这是对这样一个复杂的数据和查询的极端情况。通常你只需要混合2或3个数据存储。

如果您的系统中必须有事务处理,那么同步数据将会困难得多,并且最好将所有数据都存储在支持事务的数据存储中。但即便如此,您仍然可以将您的交易需求限制为部分数据,并在其他数据存储中使用冗余数据。例如,使RDBMS或DynamoDB中没有引用记录的孤立S3对象通常不是什么大问题。

关于您正在编写的用于处理分布式数据的PHP(或其他编程语言)代码,它也取决于。如果您需要数据存储本机支持的复杂JOIN,GROUP_BY,FILTER功能,则最好使用数据库功能。但很多时候,您的代码可以很简单地编写,例如查询正确的数据库(例如,对CloudSearch进行文本搜索),并汇总来自不同数据存储区的数据。

1

是ü可以肯定会利用两个... 但也有一些优点和缺点吧..

缺点:

  • 在MySQL中你会得到ACID保证,但在Dynamo-db中没有这样的保证。
  • 同样在MySQL中,您可以在Dynamo-db中编写复杂的代码,但不能编写复杂的查询。

优点:

  • 它具有分布式散列表由此多个性能增强器的特性相比到MySQL。

您需要查看此博客以了解更多信息。 这是a link

你也可以使用更多的NoSql模块,如HIVEQL。 HiveQl远远超过Dynamo-Db,它可以比Dynamo-db提升性能。