我不确定这是否是一个好的电子邮件数据库架构。
我为每个用户使用 redis 收件箱、存档、已发送列表来存储对话 ID(或线程 ID)。每个对话 ID 都指向一个消息 ID 的 Redis 列表。每个消息 id 都指向一个 PostgreSQL 消息表。每当发送、存档或删除消息时,我都会在 redis 列表中移动 ID。
只有在跨消息搜索和从线程中获取消息时,事情才会有点困惑,因为您必须始终检查线程中的消息是否属于您,有时人们会在同一个线程中回复但回复不同一组用户。
这是一个好方法吗?有更好的想法吗?如何改进这个?
好吧,最后你的论点是正确的:)
http://redis.io/topics/faq
Redis is an in-memory but persistent on disk database, so it
represents a different trade off where very high write and read speed
is achieved with the limitation of data sets that can't be larger
than memory
所以你不能把所有的东西都保存在 Redis 中。此外,您无法方便地进行文本搜索,因此有必要将实际消息数据保存在 PostgreSQL 或其他数据库(如 Solr)中。
思考在您的案例中创建 Redis 层的真正用途是什么。如果您保留 Redis,它可以非常有效地处理 ID,您也可以在其中保留主题和电子邮件地址。
最好的办法是开始一些用例:)
在这种情况下,ts 是每条消息的纪元时间
这里 thread:1:messages 有消息 ID,我们将作者存储在 thread:1:authors 键中。
根据我使用 Redis 的经验,您必须选择一个好的客户端(对于 PHP 无疑是 PHPRedis [ https://github.com/nicolasff/phpredis ],因为它是编译为 php 模块的 C 扩展),并且也在您的应用程序中进行大量处理。
希望有用。