我不知道是否已经提出过这类问题。其实我不知道要搜索什么。我问在正确的地方?
就像一个例子,我一直想知道像Facebook这样的社交媒体巨头如何管理他们的用户设置模块......数据库设计是什么以及他们如何设法隐藏他的用户更新朋友'时间表如果他选择不在特定的朋友时间线上显示他的更新。我的意思是如果我在那里编程然后我会在数组中加载所有设置值,并且会有许多条件语句来检查每个用户设置和相应的打印数据。
但我认为这会使代码无法管理,因为会有很多条件导致不良后果。
所以我的问题是,有没有更好的方法来做到这一点?
我不知道我在这里有任何意义,但我试图解释我的问题。
答案 0 :(得分:3)
Facebook的数据在文档存储库(Nosql)中维护,高效的索引用于快速查找标记和搜索。这种搜索和数据存储方法与基于关系数据库的数据存储和搜索明显不同。
Google也使用类似的方案来映射整个网络,并立即回复结果。
因此,简单来说,您的数据以Google索引邮件的方式存储和编制索引,唯一的区别是,数据也存在于Facebook中。
相关技术为Bigdata,Mongodb,Apache Hadoop。其中一个领先的索引管理和搜索算法是Lucene。 Apache Elasticsearch是Lucene周围的用户友好型软件包。
因此,facebook将这些安全标准视为标签(简单语言)并像搜索一样谷歌,并在一个令人愉悦的前端呈现给你,而不是听起来像搜索引擎。
在设置系统时,您可以使用elasticsearch进行更快速的搜索。 Elasticsearch使lucene的实现更容易。它肯定会有一些学习曲线。 Elasticsearch也可以与rdbms一起使用,在这种情况下,您的数据会保存在数据库中,但索引也会保持更快的搜索速度。绝对是成本是磁盘空间。它可以有很多标准,但仍能更快地获得结果。
对弹性搜索进行快速tutorial。
答案 1 :(得分:2)
要评估的条件很多,这是正确的。但是在SELECT
语句中,您可以轻松地在WHERE
子句中组合所有这些条件,这非常有效。
基本上,只要您在相等性上进行比较,数据库就可以轻松地对其进行优化,从而允许它快速搜索符合所需约束的帖子。尽管有很多条件,但与要搜索的表中有数百万个条目相比,它们并没有真正影响性能。
答案 2 :(得分:2)
你所要求的是非常艰难的计划结果......无论何时你需要开发具有很好复杂性的东西,你都必须使用已知的方法很好地规划(工程)它。
通常,DB与实体有许多多态关系,有些人负责编写查询过程,应该为开发人员公平地检索所需数据。
你真的不能提出简单的解决方案,关键在于规划和规划好。没有人正确的答案。
如果您的应用程序相当小,您可以按照自己的方式实施,然后您就会看到可以升级的内容..这几乎是您唯一的出路。 (顺便说一句,这是大多数statup正在做的事情)
祝你好运。
答案 3 :(得分:2)
关于facebook的db架构以及它如何工作以及为什么它是一个好的设计,这里有一些文章可以解释为什么:
这是由facebook发布的,它解释了他们如何管理数据。他们使用TAO data model并通过应用graph theory和其他复杂的算法以及先进的备忘录缓存和数据处理,他们可以有效地管理大量用户数据。
但是关于你的问题:
数据库设计是什么以及他们如何设法隐藏他的朋友的用户更新'时间表如果他选择不在特定的朋友时间线上显示他的更新?
我认为这篇文章会为您提供一些见解,了解facebook的db结构类型以及每个用户的功能是什么:Social Network Friends Relationship Database Design
通常,用户更新会隐藏在您的朋友身上。时间轴如果你没有显示你对该特定朋友的更新是通过在数据库中存储值来管理的..你可以在db中创建一个view_type
表,这将决定用户可以看到什么类型的视图,然后发出一个您的sqls中的where
条件基于用户选择的视图..还有很多方法可以处理这个问题,并且需要良好的数据库结构,当然还有一个好的计划高效的数据库是一个非常重要和严格的程序..