5

Discord使用ElasticSearch建立数十亿条消息的索引 -Sukhad

 2 years ago
source link: https://www.jdon.com/62821
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Discord使用ElasticSearch建立数十亿条消息的索引 -Sukhad


Discord 有数百万用户每天发送数十亿条消息。现在,这些用户也想搜索这些消息。我们如何索引这些以使它们可以通过消息中的不同关键字进行搜索?
让我们来了解一下:

1. 简单的答案是 Discrd 使用 ElasticSearch,Elasticsearch 是一个分布式、免费和开放的搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 基于 Apache Lucene 构建。

2、elasticsearch如何存储数据?它以 JSON 文档的形式存储它,该文档是多个键值对的组合。

3、 这种弹性搜索如何启用索引?弹性搜索在内部创建一个倒排索引。什么是倒排索引?倒排索引列出了出现在任何文档中的每个唯一单词,并标识了每个单词出现在的所有文档。

4、在索引过程中,Elasticsearch 存储文档并建立倒排索引,使文档数据可近实时搜索。索引使用索引 API 启动,您可以通过它在特定索引中添加或更新 JSON 文档。

5.、现在让我们看看 discord 如何使用 Elastic Search。当文档被批量索引时,Elasticsearch 喜欢它。这意味着 Discord 无法索引实时发布的消息。人们通常不会搜索刚刚发布的消息,而是想搜索旧消息。

6、 现在,让我们看看批量索引需要什么?

  • 用于临时存储传入消息的分布式队列。
  • 一组索引器工作人员将一批消息索引到弹性搜索中。

7. 对于队列,discord 使用 Celery。它是一个开源的分布式队列。现在,Elastic Search弹性搜索不会在单个服务器上运行。它将以集群的形式运行。现在,问题来了,在哪里放置消息?在哪个集群上?

8、 这是在分片分配器的帮助下决定的,分片分配器决定将消息放在哪个分片上。但是,等一下。什么是分片?分片是弹性搜索集群和索引的组合。因此,这两者形成了一个分片,被不和谐用作一个单元。弹性搜索本身有一些分片。但这是不同的,所以不要混淆。

9、现在,最后一部分是服务发现——发现弹性搜索集群和该集群中的主机。这一点,他们在 etcd 另一个开源工具的帮助下完成了。 </div


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK