php - AWS 数据库结构 - MySQL 和 DynamoDB

标签 php mysql amazon-web-services amazon-dynamodb

<分区>

我希望为我的交易数据运行一个 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 的文本搜索)并组装来自不同数据存储的数据片段。

关于php - AWS 数据库结构 - MySQL 和 DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13985343/

相关文章:

php - Doctrine -OneToMany关系,所有结果行均未在对象中提取

php - Woocommerce 在感谢页面获取自定义选择字段值

amazon-web-services - 如何在运行 Docker 容器的 AWS EC2 实例上启用 HTTPS

amazon-web-services - 权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic) - AWS

javascript - 如何在文本框值中输入当前日期并显示我的附加数据

php - 在数组中查找具有相似条件的

php - MySQL 查询将日期字符串解释为日期

Python MySQLdb 插入主键

php - 我的 WHERE 子句不符合条件

python - 在 Amazon Linux 上安装 Scipy 时出错