将数据分离到不同的数据存储区是一个非常好的主意,每个存储区都有其优点。
例如:
您可以以不同的方式编写上述语句,将所有内容存储在 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.