如何最好地组合键值存储和数据库的数据

时间:2012-03-26 14:25:48

标签: database nosql key-value

假设我们有一个社交网络的朋友列表。

大多数用例都要求将好友列表表格连接到另一个保存个人详细信息的表格,例如:姓名,年龄,城市,个人资料图片网址,上次登录时间等等。

一旦好友列表表格在100M行范围内。像这样查询JOIN可能需要几秒钟。如果你引入一些其他WHERE条件,它甚至可能会更慢。

键值存储系统可以非常快速地引入好友列表。

假设我们想要显示最近登录的10个用户的朋友。 计算此输出的最佳方法是什么?我一直在考虑的一些方法如下。他们中的任何一个都有意义吗?

  • 我们应该将所有数据保存在键值存储环境中吗?更新 每次新登录的键值存储?
  • 或者我们应该首先拉出好友列表ID。然后使用像“IN()”这样的数据库命令并查询数据库?
  • 在客户端级别合并数据?一个javascript解决方案?

1 个答案:

答案 0 :(得分:0)

在您的Users表中,您有一个字段可以保存上次登录的时间戳。在你的表中,存储了朋友关系,每个关系有1行,这使得表格很长。

所以加入这些表似乎很糟糕,我们应该以某种方式优化这个过程?答案是:不,不一定。构建DBMS的人遇到与您相同的问题,并且他们实现了解决这些问题的工具。每个DBMS都有一些比你和我更聪明的查询优化。

所以加入长桌并不羞耻。如果您想尝试优化,可以:

  • 获取用户朋友的ID。
  • 获取您想要的前10个朋友所需的信息,这些信息按id适合的last_login desc排序(以及其他条件)。

您不需要加入表,但是您将使用两个查询,因此如果您的DBMS是智能的,则加入更快(可能运行测试)。

如果您愿意,可以在加载页面后使用ajax加载此数据,这样可以改善用户的体验,但数据库上的流量也是一样的。

我希望这会有所帮助。

编辑:哦,是的,如果你已经知道好友ID(你需要其他东西),你甚至不需要加入。您可以将ID传递给javascript,后者通过AJAX加载最后一个登录列表。