我正在为一个巨大的数据集(来自一个国家的所有公司和公司合作伙伴,因此人们可以找到所有者和无关公司之间的关系)构建一个图形搜索和显示系统,其中包括大约5000万个名称和ID(想想经过审查的SSN)。
我设法使用Memgraph加载了所有这些,使用了大约32 GB的RAM,但按个人/公司名称搜索是可怕的,平均需要大约30秒。一旦找到,数据库将快速(<5s)提供相关节点。
我正在考虑将所有文本数据(公司和合作伙伴名称,公司和个人ID)迁移到Elasticsearch,因为它专门用于文本搜索,并且在Memgraph中只保留数字节点ID和关系,将相关的节点ID存储在Elasticsearch上。
我在一台开发机器上做这一切,48 GB RAM,所以这是我现在的极限。
我的问题是:
1.对于具有此大小名称的数据集,预期的搜索时间是多少?RAM的消耗情况如何?
1.我谈论Elasticsearch是因为它似乎是我想要实现的最知名/最成熟的系统,但我有点谨慎,因为它是基于Java的。我寻找替代品,并提出了Meilisearch(基于Rust)和Manticoresearch(基于c++),这些都好吗?
1.或者,一个支持文本搜索的关系数据库会更好地为我服务(例如,Postgres + pg_trgm或pg_bigm)?
蒂娅
1条答案
按热度按时间o7jaxewo1#
免责声明:我是Memgraph的联合创始人兼CTO
Memgraph目前还没有出色的文本搜索功能,但有一些选择:
=~
操作符-> https://memgraph.com/docs/querying/read-and-modify-data#regular-expressions执行正则表达式文本搜索注意:如果您有数据索引(通过创建标签/标签属性索引),搜索可能会更快重要提示:我们收到了很多这样的请求(对文本搜索索引的本地支持,因为将所有内容放在一个地方会更有效),因此我们计划发布适当的文本搜索索引功能,甚至可能在v2.13中(从今天起大约10周)->请遵循https://github.com/memgraph/memgraph/issues/1261的进度