我正在考虑使用AWS DynamoDB构建聊天应用。该应用程序将支持1:1和群聊。
我想为每个聊天创建一个表,其中每个发送的聊天文本行都有一条记录。 DynamoDB适合这种工作吗?
我也在考虑合并两个表。但这是一个好主意,如果有 - 让我们假设 - 100k或1000k用户?
答案 0 :(得分:1)
我认为您可能会遇到桌面上的读取容量问题。写入容量应该没问题,因为每秒都没有这么多消息(例如10个左右),但是你需要不断地为所有用户读取消息,因此这样做会很昂贵。
如果您想将DynamoDB用作存储并像在网络上的任何正常聊天中那样分发聊天消息,那么根据您的使用情况,它可能是有意义的。假设您有一个哈希键UserId和Timestamp,您可以在特定时间段内查询特定用户的所有消息。但是,如果你想在聊天文本中搜索(可能是一个更有用的功能),那么DynamoDB本身就不会工作。它不像SQL,你可以在那里进行LIKE '%abc%'
查询(在SQL中也不是一个好主意)。
或许你最好将S3用作数据存储,将ElasticSearch用作搜索工具。如果您需要上述用例"在时间跨度S"中获取来自用户X的所有消息。 (作为一个简单示例)您还可以使用DynamoDB存储元数据,例如UserId,Timestamp,PositionInFile或类似的东西。