答案 0 :(得分:2)
对于数据库,Facebook因其速度和可靠性而使用MySQL。 MySQL主要用作键值存储,因为数据随机分布在大量逻辑实例中。这些逻辑实例分布在物理节点上,负载平衡在物理节点级别完成。 就定制而言,Facebook开发了一种自定义分区方案,其中为所有数据分配了全局ID。它们还具有自定义归档方案,该方案基于每个用户的频率和最新数据。大多数数据是随机分布的。
对于像收件箱这样的某些部分,它使用“最终一致”的NoSQL数据库,当您查询它们的集群时,您会得到“当时的最佳答案”,而不一定是正确的。
从问题的某些部分来看,您似乎正在尝试采用适用于社交媒体的实践并更广泛地应用它们。最终,一致性将不适用于会计或贸易或医学或研究。如果它是阿姨Fannie的最新照片,那么没有人会关心FB页面是否显示最近的那个,一直都是。你愿意为这种平庸牺牲那种准确性。
将每个第3个普通形式的商业应用转变为关键值对,因为FB做到了,不是我愿意登上的火车。
答案 1 :(得分:1)
问题有点模糊,我们只能推测Facebook的作用。
但我们可以讨论一下典型的Solr驱动搜索是如何工作的,这是一个更具体的主题。是的,在将数据加载到Solr索引中时, 要对数据进行非规范化(here are some good tips on Solr schema design)。可以使用Data Import Handler或自定义ETL过程完成此ETL过程。数据源可以是任何东西,而不仅仅是关系数据库。如何设计架构在很大程度上取决于您将要执行的搜索类型。
完全非规范化(Solr确实有一个扁平模式)意味着没有连接,因此它具有相当的可扩展性(参见Solr shards和replication)。
您的其他问题是搜索结果的相关性。在这里,Solr 非常可调(请参阅Relevancy Cookbook,FAQ)。是的,这几乎是一种艺术,因为每个应用程序都有不同的相关性概念,因此需要进行不同的调整。然而,对于开箱即用的Solr实例而言,默认的相关性通常是可以接受的(对于Solr和Lucene开发人员来说,这是赞誉)。