我希望为我的交易数据运行一个 DynamoDB 数据库,为需要 SQL 连接查询的数据运行一个 mysql 数据库。
为了尽量避免 MySQL 中的大容量表(保持更好的性能),我将把一些数据移到 DynamoDB 中,有时需要引用 MySQL 中的数据。
在 DynamoDB 中查询某些数据并查询 MySQL,然后在 PHP(或其他服务器端语言)中执行最终数据比较以获得返回客户端/浏览器所需的数据,这是否是糟糕的编程/查询?
我想基本问题是:必须查询 NoSQL 和 SQL 数据库,然后用 php(或服务器端语言)处理结果...这是正常的还是坏主意?
谢谢
注意:这样做的主要目的是进行数据库规划,以避免出现难以管理的超大型关系数据库情况。因此想要将批量数据移动到 NoSQL (DynamoDB)...
将您的数据分离到不同的数据存储中是一个非常好的主意,每个数据存储都有其优点。
例如:
- 您可以将 BLOB 放入您的 RDBMS(如 MySQL)中,但最好将其存储在 Amazon S3 中。 .
- 您可以将文本文档放入您的 RDBMS 中并使用“... LIKE %QUERY%...”查询它们,但最好将它们放在 Elastic Search 或 Amazon CloudSearch 中。 .
- 您可以将 session 管理数据放入 RDBMS 中,但最好放在 Amazon Elastic Cache 中或 DynamoDB
- 您可以在 RDBMS 中使用查找表,但最好在内存或基于内存的 NoSQL(如 Memecached 或 Redis)或 DynamoDB 中使用
您可以用不同的方式编写上述语句,将所有内容存储在 MongoDB 或 DynamoDB 中,但更愿意将它们放在其他地方。
当您将数据放在不同的存储中时,基于与数据类型相关的数据存储的简单性以及您对这些数据的使用,您可以获得一个更简单、分布式、可扩展且通常速度更快的系统。
缺点是您需要在数据存储之间同步数据。将记录添加到 DynamoDB 后,您需要将 BLOB 上传到 S3,更新 CloudSearch 中的文档并将记录添加到 MySQL,并将相关行写入日志文件以供将来分析。当然,这是拥有如此复杂的数据和对其进行查询的极端情况。通常您只需要混合 2 或 3 个数据存储。
如果你的系统中必须有事务,那么同步你的数据就会困难得多,最好把你所有的数据都放在一个支持事务的数据存储中。但即便如此,您也可以将交易要求限制在您的部分数据中,并在其他数据存储中使用冗余数据。例如,在您的 RDBMS 或 DynamoDB 中拥有没有引用记录的孤立 S3 对象通常不是大问题。
关于您正在编写的 PHP(或其他编程语言)代码来操作分布式数据,这也取决于情况。如果您需要数据存储 native 支持的复杂 JOIN、GROUP_BY、FILTER 功能,最好使用 DB 功能。但很多时候,您的代码编写起来可能足够简单,例如查询正确的数据库(例如,对 CloudSearch 的文本搜索)并组装来自不同数据存储的数据片段。