我正在创建一个类似Facebook的社交网络网站。 对于我的“墙”,我有许多不同类型的信息,如状态,消息,用户喜欢/不喜欢页面,用户更新了他的个人资料,...
我想知道如何设计我的数据库(与墙相关的表),以便在我获取墙上项目时尽可能提高效率(就速度而言)。
提前致谢!
编辑:我有两个想法:
答案 0 :(得分:2)
我建议您有两张桌子 - 一张用于内容,另一张用于喜欢/不喜欢。拥有大量空值不是问题 - 空值不会占用空间。可能需要单独保持喜欢/不喜欢,因为它们发生了很多而且他们不满足于自己。
如果您希望系统具有可扩展性,请避免使用JOIN-s。连续执行2-3个查询比使用大量JOIN-s的大型大量查询更好。此外,如果您有大量的READ操作而没有那么多WRITE(与数字或READ相比),那么在WRITE期间执行其他操作是明智的。
例如,您可以为wall创建一个单独的表(包含用户ID和帖子ID)。当有人发表新帖子时,帖子的id会写入每个朋友的表格WALL。因此,显示墙只是从表格WALL中读取后期内容并提取内容 - 而不是在显示期间从所有用户的帖子中搜索内容。
当新人成为朋友时,你只需将他们最近发布的帖子的内容复制到彼此的墙上。祝这个项目好运!
答案 1 :(得分:0)
我认为,NOSQL用于获得性能。对于这种应用程序,任何大型表db访问都会很慢,更不用说任何连接表了。