Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 通过迁移到NoSQL提高速度_Mongodb_Postgresql_Performance_Nosql_Bigdata - Fatal编程技术网

Mongodb 通过迁移到NoSQL提高速度

Mongodb 通过迁移到NoSQL提高速度,mongodb,postgresql,performance,nosql,bigdata,Mongodb,Postgresql,Performance,Nosql,Bigdata,您好,谢谢您阅读我的问题 目前,我们通过stolon()在3个节点上使用PostgreSQL v.10 我们有3个表格(我想让我的问题简单化): 发票(15000000条记录) 用户(3500000条记录) 用户地址(20000条记录) 主查询如下所示(原始查询是一个大型查询,使用一个临时表,有很多where条件,但示例显示了我的问题。) 函数get\u similor\u name返回相似的名称(例如:get\u similor\u name('Jon')将返回John、Jonny、Jonat

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

目前,我们通过stolon()在3个节点上使用PostgreSQL v.10 我们有3个表格(我想让我的问题简单化):

  • 发票(15000000条记录)
  • 用户(3500000条记录)
  • 用户地址(20000条记录)
  • 主查询如下所示(原始查询是一个大型查询,使用一个临时表,有很多where条件,但示例显示了我的问题。)

    函数
    get\u similor\u name
    返回相似的名称(例如:
    get\u similor\u name('Jon')将返回John、Jonny、Jonathan…
    等),平均200-1000个名称。我必须使用以下功能:\

    查询执行了很长时间,大约30-120秒, 但是如果我从查询中排除函数
    get\u similor\u name
    ,那么执行时间不会超过1秒

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

    我们不可能创建分区表,因为我们有很多列用于此目的。我们不能只把一张桌子分成一行

    我考虑将我的仓库迁移到MongoDB

    我的问题是:

  • 我搬到MongoDB对吗
  • 如果我将仓库从PostgreSQL移动到MongoDB控制下的20-40个节点,是否可以提高性能
  • 是否可以在MongoDB或类似的解决方案上使用函数
    get\u similor\u name
    ?如果是,如何进行
  • 您是否有在MongoDB中使用全文搜索的良好经验
  • 在生产中使用MongoDB是否正确
  • 你能建议一个“google vector”来根据你的意见制定正确的解决方案吗

  • 我不知道迁移到MongoDB是否能解决文本搜索问题,但Postgres具有向量和三角图等优秀特性。你厌倦了吗


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

    问题是很广泛的,但最好的概括是“仅仅使用另一个数据库引擎,仅此操作几乎不会带来任何好处”。从SQL迁移到NoSQL不仅仅是迁移数据的问题。关键是重新设计数据,当然还要了解何时/是否这才是最好的做法。我建议你至少从理解为什么这不是一个简单的“迁移”开始。问题中的另一个大问题是它实际上是“多重问题”。虽然我对这种急切的心情表示同情,但不要问“一个大问题”,而是把你的问题分解成单独的小问题,然后逐一提问。有关如何在此处发布问题的指导信息,请参阅和。您仅以姓名加入?难道一个人不能共享同一个名字而成为另一个人吗?另一件事,调用
    get\u similor\u name()
    只需要3个字母,或者可以更改?我迁移到MongoDB对吗?你检查过你的硬件配置吗?因为如果您将数据存储在商品(读S-L-O-W)硬件上,例如纽蛋5400 rpm消费级SATA磁盘,则不需要。您只需购买更快的硬件即可。因为世界上所有速度最快的软件都不能在速度较慢的硬件上快速运行千兆字节和千兆字节的数据。
    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;