2012-03-26 27 views
0

假设我们有一个社交网络的朋友列表表。如何最好地结合键值存储和数据库的数据

大部分用例将需要的朋友名单表被加入到你持有的个人信息,比如另外一个表:姓名,年龄,市档案图片URL,上次登录时间等信息。

一旦好友列表在100M行范围内。查询这样的JOIN可能需要几秒钟的时间。如果您引入其他几个WHERE条件,它甚至可能会变慢。

一个键值存储系统可以很快引入朋友列表。

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

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

我会在快速存储中的朋友列表部分,并使用'IN'查询而不是联接 – njzk2 2012-03-26 14:28:46

回答

0

在Users表中,您有一个字段用于保存上次登录的时间戳。在你的表格中,朋友关系被存储,每个关系有一行,这使得表格非常长。

因此,加入这些表似乎不好,我们应该优化这个过程?答案是:不,不一定。构建数据库管理系统的人遇到同样的问题,他们会实施这些工具来解决这些问题。每个DBMS都有一些比你和我更聪明的查询优化。

所以加入长表并不是件可耻的事。如果你想尝试优化你可能:

  • 获取用户的朋友的ID。
  • 获取你想要的信息,前10位朋友按last_login desc排序,其中id适合(以及其他条件)。

你不需要加入表格,但是你会使用两个查询,所以也许如果你的数据库管理系统是聪明的联接更快(也许运行测试)。

如果你愿意,你可以在加载页面后使用ajax加载这些数据,这样可以改善用户的体验,但数据库中的流量将是相同的。

我希望这有助于。

编辑:噢,如果你已经知道朋友ID(你需要他们的其他东西),你甚至不需要加入。您可以将ID传递给JavaScript,稍后通过AJAX加载上次登录列表。

相关问题