database - 存储频繁请求的具有关系的键值数据的有效方法?

标签 database database-design redis bigdata key-value

假设我正在构建 Twitter。

其中一项任务是跟踪特定用户阅读了哪些推文并将此数据存储在服务器上。当用户请求某人的提要时,服务器应返回:

[
  {
    id: 1,
    tweet: "Hey there!",
    isRead: false
  },
  {
    id: 2,
    tweet: "Here's my cat, look",
    isRead: true
  },
  {
    id: 2,
    tweet: "Blue or yellow? Thats the question",
    isRead: true
  },
  ...
]

存储哪些推文被哪些用户阅读的数据,以及在为特定用户返回某人的提要时检索这些数据的最有效方法是什么?

非常感谢任何关于数据存储架构的想法。我当前的堆栈是用于存储用户和“推文”的 PostgreSQL。项目中也用到了Redis、MongoDB和neo4j,所以可用。

第一个猜测是使用Redis,比如:

user_id: tweet_id
-----------------
user_id: tweet_id
-----------------
....

但我认为,可能会有更好的变体,更适合持久化数据存储。

提前谢谢你。

最佳答案

看看 Redis 的作者 antirez(又名 Salvatore Sanfilippo)制作的这个 Twitter 克隆:http://redis.io/topics/twitter-clone

关于database - 存储频繁请求的具有关系的键值数据的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32284382/

相关文章:

mysql - 将 "readonly"对象作为序列化数据存储在关系数据库中

mysql - 在统计系统上,我应该保存有关多个表或仅一个表的单次访问的少量信息吗?

sql - 存储可变数量首选项的最佳方式?

angularjs - 显示来自 Redis 的编码数据

ruby-on-rails - Rails 4 + PostgreSQL 9.6 hstore,无法执行 “CREATE EXTENSION hstore”

sql - 使用 couchbase N1QL 仅获取子文档

php - SQL 定期计算一个表中的所有新投票,并增加另一个表中的总计数值

database-design - 在逻辑/boolean 数据库字段中使用 [0,1] 与 ["Y","N"] 与 ["T","F"]?

caching - 序列化和反序列化 POJO 的开销是否是使用 Infinispan 而不是 Memcached 或 Redis 来缓存 POJO 的一个很好的理由?

redis - 开源Redis集群和Redis labs企业集群有什么区别?