我们正在使用一组node.js服务器为我们的聊天系统供电。
我们希望用户能够看到他们之前与任何其他指定用户的对话,因此需要存储聊天记录。
由于这些从不需要以任何方式进行编辑或查询,因此将它们存储在数据库中是没有意义的,因此我们希望将它们简单地保存为存储在Amazon S3上的简单json文件。
使用Amazons PHP api现在可以使用标准的fopen / fwrite命令使流式传输到S3成为可能。但在这种情况下,我们需要使用Node.js。
基本上我们希望能够在用户开始聊天时打开流,并在用户聊天时附加到S3上的聊天记录文件的末尾。
如果无法做到这一点,我们的其他选择是什么?
我们考虑在node.js服务器上创建本地writeStream,使用它们来实质上缓冲数据,检测对话结束,然后将文件上传/替换为S3。它似乎过于冗长,并且鉴于node.js服务器位于Amazons网络中,感觉就像一个糟糕的勒芒解决方案,现在可以在PHP中清晰地流式传输到S3。
提前致谢
答案 0 :(得分:1)
Since these never need to be edited or queried in any way it does not make sense to store them in a database...
我不同意你的逻辑:只是因为你只想写一次并且读多次,并不意味着DB不是一个合适的解决方案。您可以使用S3,但鉴于您的问题的简要描述,我认为从长远来看,经典的数据库解决方案将为您提供更好的服务。如果您使用数据库路由,则AWS(RDS-SQL Server,Postgres,MYSQL),DynamocDB和SimpleDB中有许多支持良好的选项。
即使你最终在S3上存储聊天记录,认为你可能最终在数据库(例如DynamoDB)中存储关于每个聊天的元数据也是不合理的。你要存多少聊天?如果您最终得到100个数千或数百万个单独的聊天文件,您将如何在需要时将用户导航到正确的用户?这是一个数据库将派上用场的地方,然后问题就是,如果你打算使用数据库存储元数据,为什么不只是存储内容?