改用NoSQL来提高速度

时间:2018-11-22 20:23:09

标签: mongodb postgresql performance nosql bigdata

您好,谢谢您阅读我的问题!

当前,我们通过stolon(https://github.com/sorintlab/stolon)在3个节点上使用PostgreSQL v.10 我们有3个表格(我想简化我的问题):

  1. 发票(1500亿条记录)
  2. 用户(3,500万条记录)
  3. User_Address(2000万条记录)

主查询看起来像这样(原始查询很大,使用临时表,并且有很多条件,但该示例显示了我的问题。)

select 
    i.* 
from invoice as i 
inner join get_similar_name('Jon') as s on i.name ilike s.name 
left join user_address as a on i.user_id = a.user_id
where 
    a.state = 'OH'
    and
    i.last_name = 'Smith'
    and
    i.date between '2016-01-01'::date and '2018-12-31'::date;

函数get_similar_name返回相似的名称(例如:get_similar_name('Jon') will return John, Jonny, Jonathan ...等),平均返回200至1000个名称。我必须使用功能:\

查询执行了很长时间,大约30-120秒, 但是如果我从查询中排除函数get_similar_name,则执行时间将不超过1秒。

我已经配置了PostgreSQL,并且服务器运行良好。我还创建了索引,而我的查询不使用seq scan等。

我们无法创建分区表,因为我们为此有很多列。我们不能只将一张桌子划分成一行。

我考虑将仓库迁移到MongoDB

我的问题是:

  1. 我要迁移到MongoDB吗?
  2. 如果我将仓库从PostgreSQL迁移到MongoDB控制下的20-40个节点,会提高性能吗?
  3. 在MongoDB或类似解决方案上是否可以使用功能get_similar_name?如果是,怎么办?
  4. 您在MongoDB中使用全文搜索是否有丰富的经验?
  5. 在生产环境中使用MongoDB是否正确?
  6. 能否请您提出一个“ google-vector”建议以解决您的意见?

1 个答案:

答案 0 :(得分:1)

我不知道迁移到MongoDB是否可以解决文本搜索问题,但是Postgres具有出色的功能,例如Vector和trigram。你累了吗?

https://www.compose.com/articles/mastering-postgresql-tools-full-text-search-and-phrase-search/

https://www.postgresql.org/docs/9.6/pgtrgm.html

在我以前的项目中,我们使用了pg_trgm,并且对其性能非常满意。