V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Reign
V2EX  ›  程序员

对于百万行级别的数据用 ES 搜索,大内存+HDD 和小内存+SSD 哪个好?

  •  
  •   Reign · 2018-07-11 08:50:11 +08:00 · 5426 次点击
    这是一个创建于 2356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前网站有 650 万行数据,数据库大小 8.1G ,后期可能会增至 10G 左右,目前选择服务器:

    1. 内存 16G+50G 固态硬盘,硬盘 iops 在固态硬盘中属于中规中矩
    2. 内存 64G+4T 机械盘,硬盘 iops 在机械盘中属于中规中矩

    这两者选哪个比较好?

    另外,ES 能不能像 Redis 一样,将所有索引数据全部存储在内存中,不是热数据是所有数据,这样的话,64G 完全能装得下 8.1G 的数据了,那肯定选择第二台服务器读写更快了

    第 1 条附言  ·  2018-07-11 10:57:41 +08:00
    非常感谢各位回答,貌似倾向于大内存方案的更多,请问一下,如果设置 ES 的内存为 32G,剩下的内存分配给 Redis 和 MySQL 还够不够?
    24 条回复    2018-07-12 05:50:25 +08:00
    heeexy
        1
    heeexy  
       2018-07-11 09:00:15 +08:00   ❤️ 2
    Reign
        2
    Reign  
    OP
       2018-07-11 09:44:44 +08:00
    @heeexy 谢谢,我看过,就是不知道对于我这种读远大于写的场景,到底内存和 SSD 哪个重要?
    xuminzhong
        3
    xuminzhong  
       2018-07-11 09:56:48 +08:00
    读大于写,内存重要,因为第一次读取后,如果内存有空闲的,OS 会一直缓存在内存里。
    ytmsdy
        4
    ytmsdy  
       2018-07-11 10:01:17 +08:00 via iPhone
    内存有 64g,就算把 10g 的数据全部加载到内存里也放的下啊
    yuqaf
        5
    yuqaf  
       2018-07-11 10:01:25 +08:00
    这么点数据,mysql 都足够了。。。
    heeexy
        6
    heeexy  
       2018-07-11 10:02:56 +08:00
    内存,尤其是如果还要搞聚合查询的话

    https://www.elastic.co/blog/a-heap-of-trouble
    Reign
        7
    Reign  
    OP
       2018-07-11 10:06:29 +08:00
    @ytmsdy ES 有没有一种模式可以让所有数据常驻内存
    AntonChen
        8
    AntonChen  
       2018-07-11 10:53:30 +08:00 via Android
    大内存,ES 就是玩内存的,只要是 open 状态的就会载入内存。个人建议单机 64G 内存,heap 配置一半
    alvin666
        9
    alvin666  
       2018-07-11 11:06:51 +08:00 via Android
    @Reign 大不了开虚拟内存盘,怎么看都是第二个搭配划得来
    crawl3r
        10
    crawl3r  
       2018-07-11 11:09:08 +08:00
    就算是 10g, mysql+ssd 完全够用了。最近在搞 2T 数据,mysql 分片+ssd 完全够了
    coolloves
        11
    coolloves  
       2018-07-11 13:05:33 +08:00
    这么点数据,选大内存啊
    可以划 10G+的内存创建一块盘,然后 es 的 data 放过去
    slixurd
        12
    slixurd  
       2018-07-11 13:12:10 +08:00
    mdos
        13
    mdos  
       2018-07-11 16:08:47 +08:00 via Android
    哈哈哈哈,翻到这标题的时候我小弟坐在边上,直接就问我“ es 文件管理器搜索还要问别人的嘛?”我我我 xswl
    heeexy
        14
    heeexy  
       2018-07-11 17:51:38 +08:00
    除了 heap 的 32G , 剩下的内存也会被 file cache 用上的 ,没有被浪费
    追求性能的话就不要再装别的了
    heeexy
        15
    heeexy  
       2018-07-11 17:53:10 +08:00
    当然 目前这个数据量确实很小 用啥工具 怎么玩应该都不会有压力的
    noNOno
        16
    noNOno  
       2018-07-11 17:54:28 +08:00
    @mdos 传播快乐,yxswl
    pynix
        17
    pynix  
       2018-07-11 18:16:15 +08:00
    肯定选内存型。。。
    blueskea
        18
    blueskea  
       2018-07-11 18:26:24 +08:00 via Android
    记得在哪看过,ES 单节点内存分配超过 32G 没有太大意义
    haoba
        19
    haoba  
       2018-07-11 18:36:16 +08:00
    主要看字段 mapping 的类型吧,如果需要全放内存的话,就指成 fielddata,这个是在 jvm heap 里面的。
    doc_values 是在磁盘内读的,不必放在 heap 里面,所以太大的内存是没有必要的,doc_values 是默认开启的。留出合适的内存给操作系统做 buffer 会性能更好一些。
    haoba
        20
    haoba  
       2018-07-11 18:42:59 +08:00
    太大的 jvm 内存,GC 时间一样会变长,没必要。
    ShineSmile
        21
    ShineSmile  
       2018-07-11 18:58:16 +08:00
    建议把虚拟内存对性能的拖慢考虑进去
    wayslog
        22
    wayslog  
       2018-07-11 20:02:04 +08:00
    这还用问么。。。。肯定是大内存+SSD 呀 /滑稽
    msg7086
        23
    msg7086  
       2018-07-12 02:29:59 +08:00
    10G 数据的话,16G 内存应该够了吧,再配 SSD 挺好的。
    说句实话,这两个配置跑起来差不多,都很快。
    大内存配机械盘也 OK。
    当然最理想肯定了是 32G+SSD 了。
    wwhc
        24
    wwhc  
       2018-07-12 05:50:25 +08:00
    选 SSD + 16G ZRAM
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2619 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:22 · PVG 14:22 · LAX 22:22 · JFK 01:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.