0

我希望为我的事务数据运行一个 DynamoDB 数据库,并为需要 SQL 连接查询的数据运行一个 mysql 数据库。

为了尝试将批量/大型表排除在 MySQL 之外(保持更好的性能),我将把一些数据移动到 DynamoDB 中,这些数据有时需要针对 MySQL 中的数据进行引用。

为某些数据查询 DynamoDB 并查询 MySQL,然后在 PHP(或另一种服务器端语言)中执行最终数据比较以获取返回到客户端/浏览器所需的数据是否是糟糕的编程/查询?

我想基本问题是:必须查询 NoSQL 和 SQL 数据库,然后用 php(或服务器端语言)处理结果……这是正常的还是坏主意?

谢谢

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

4

2 回答 2

4

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

例如:

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

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

当您将数据放在不同的存储中时,基于与数据类型和您对这些数据的使用相关的数据存储的简单性,您可以获得更简单、分布式、可扩展且通常更快的系统。

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

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

Regarding having PHP (or other programming language) code that you are writing to manipulate the distributed data, it also depends. If you need complex JOIN, GROUP_BY, FILTER functionality that is natively supported by the data store, it is better to use the DB functionality. But many times, your code can be simple enough to write, like querying the right DB (for example, textual search to CloudSearch) and assemble the data pieces from across your different data stores.

于 2012-12-21T08:58:01.167 回答
1

是的,你当然可以同时使用这两者......但它有一些优点和缺点......

缺点:

  • 在 MySQL 中,您将获得 ACID 保证,但在 Dynamo-db 中没有这样的保证。
  • 同样在 MySQL 中,您可以编写复杂的查询,而在 Dynamo-db 中您不能编写复杂的查询。

优点:

  • 它具有分布式哈希表的特性,因此与 MySQL 相比具有更多的性能提升。

您需要查看此博客以获取更多信息。这是一个链接

你也可以使用更多的 NoSql 模块,比如 HIVEQL。HiveQl 比 Dynamo-Db 更多,它可以比 Dynamo-db 提高性能一点。

于 2012-12-21T07:43:45.243 回答