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

为什么没有人用 golang 或者 rust 这种新一点的语言写一个类似 es 的程序啊

  •  2
     
  •   hmmmbiubiubiu · 2024-04-19 08:46:28 +08:00 via iPhone · 6773 次点击
    这是一个创建于 370 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不懂就问,感觉现在没有 es 的类似替代,维护 es 好麻烦,难道就没有用 golang rust 这种新一点的语言写一个这样的项目吗?是不是那样会更好,为啥没有?

    45 条回复    2024-04-23 14:31:17 +08:00
    yyyxxx109876
        1
    yyyxxx109876  
       2024-04-19 08:47:41 +08:00   ❤️ 3
    为什么你不用 golang 或者 rust 这种新一点的语言写一个类似 es 的程序啊
    hmmmbiubiubiu
        2
    hmmmbiubiubiu  
    OP
       2024-04-19 08:48:59 +08:00 via iPhone
    哈哈 我感觉能力差点意思
    hmmmbiubiubiu
        3
    hmmmbiubiubiu  
    OP
       2024-04-19 08:49:27 +08:00 via iPhone   ❤️ 1
    @yyyxxx109876 我的能力还驾驭不了感觉
    pchalme
        4
    pchalme  
       2024-04-19 08:52:23 +08:00   ❤️ 3
    itstudying
        5
    itstudying  
       2024-04-19 08:52:49 +08:00
    有呀 zincsearch go 写的,目前也就是正在研究替换 es 中。 es 太耗资源了。。。
    lsk569937453
        6
    lsk569937453  
       2024-04-19 08:53:46 +08:00   ❤️ 1
    最近在用 rust 造轮子,
    网关:https://github.com/lsk569937453/silverwind
    redis:https://github.com/lsk569937453/rcache
    echo-server:https://github.com/lsk569937453/echo-server
    curl:正在造

    总结:欲造轮子,起码得先把原有的技术架构/源码搞懂,es 这种复杂的等大神吧
    BeiChuanAlex
        7
    BeiChuanAlex  
       2024-04-19 08:54:24 +08:00
    想到一个曾经听到的一句话。


    《任何框架都值得用新语言重写一遍》
    privil
        8
    privil  
       2024-04-19 08:54:30 +08:00
    @itstudying #5 后面又用 rust 重新搞了 openobserve ,日志的话真挺好
    itstudying
        9
    itstudying  
       2024-04-19 08:56:49 +08:00
    @itstudying #5 补充一下,兼容 DSL 语法,资源占用非常低,二进制文件直接部署,基本文章搜索功能能完全替换。https://github.com/zincsearch/zincsearch
    lzgshsj
        10
    lzgshsj  
       2024-04-19 09:16:36 +08:00
    为什么问之前不搜一下呢。。。
    zincsearch 就在用着,就一个二进制文件,挺轻量化的
    nothingistrue
        11
    nothingistrue  
       2024-04-19 09:19:55 +08:00
    写不涉及 UI ,大规模调度而非精细调控资源的平台级别应用,老实用 Java ,别闹。.NET 的顺位都比楼主说得这俩顺位高。
    diagnostics
        12
    diagnostics  
       2024-04-19 09:21:49 +08:00
    因为要轻量的,压根不会用 ES 的索引设计,例如 Tempo
    vagusss
        13
    vagusss  
       2024-04-19 09:24:17 +08:00   ❤️ 2
    换个语言也不一定能解决"维护 es 好麻烦"这种问题, 复杂度并不会凭空消失
    princelai
        14
    princelai  
       2024-04-19 09:31:23 +08:00
    我不用 es,但我知道用 rust 写的 polars 替代 pandas,速度快很多,语法也很方便,ruff,rust 写的格式化工具也好用,pydantic,rust 写的 python 数据类型验证工具,用 fastapi 时候都会用这个,其他的还有 lance 数据库,一个 arrow 格式的列数据库,看测试能力还不错,不过我还没有用,这些常用的未来应该都会有的吧
    linauror
        15
    linauror  
       2024-04-19 09:35:58 +08:00
    zincsearch 试用了一下,感觉最精简,期待针对于 UI 搜索上的迭代
    FrankAdler
        16
    FrankAdler  
       2024-04-19 09:40:50 +08:00 via Android
    而且 zincsearch v2 的 api 是兼容 es 的
    chengxiao
        17
    chengxiao  
       2024-04-19 10:00:26 +08:00
    https://www.meilisearch.com/
    Meilisearch 项目不大的话这个不错 文档很 nice
    crackidz
        18
    crackidz  
       2024-04-19 10:38:58 +08:00
    好多的啊....你搜索一下能找到很多的
    CaptainD
        19
    CaptainD  
       2024-04-19 10:46:14 +08:00
    es 主要是支持的功能太多,所以看起来很麻烦,只用个日志检索,其实没必要 es ,比如 Meilisearch 和 zincsearch 都不支持复杂检索式,我们的需求就没法满足
    PiersSoCool
        20
    PiersSoCool  
       2024-04-19 11:01:18 +08:00
    目的是什么,省钱 & 需求,首先需求肯定不是,省钱的话看看能省多少。
    luozic
        21
    luozic  
       2024-04-19 11:40:29 +08:00
    es 的功能是累计的,不需要 es 的全部功能,只是部分功能,sonic https://github.com/valeriansaliou/sonic
    =========================

    对于又需要 es 的大部分功能,又想着新语言重写的,自己去看 es 是多大的一个代码项目,要重写即使有啥辅助你也得有多少人组织起来干活
    https://github.com/elastic/elasticsearch/commits/main
    jiangwei2222
        22
    jiangwei2222  
       2024-04-19 11:46:11 +08:00 via Android   ❤️ 1
    1.因为 es 基于 lucene 引擎,lucene 就是 java 写的,如果重写的话就得连 lucene 一起重写了。工程量巨大,而且看不到任何优势
    2.在 es 的使用场景中,java 多占用那点内存根本忽略不计,比如我现在公司 es 集群都是大几十核,几百 G 内存的机器,干嘛要在乎编程语言那点性能?
    3.高性能在于代码设计,es 都迭代这么多年了,能优化的都优化了,你现在哪怕用汇编语言写一个 es 也不一定比现在性能好
    4.正经公司都有专业的运维人员,在专业运维看来,es 对运维很友好
    mark2025
        23
    mark2025  
       2024-04-19 11:52:53 +08:00
    rahuahua
        24
    rahuahua  
       2024-04-19 11:53:34 +08:00
    @lsk569937453 好奇问下 github 上提到的 rcache 和 redis 性能压测对比差异的主要原因是什么呀
    rahuahua
        25
    rahuahua  
       2024-04-19 11:56:35 +08:00
    @jiangwei2222 性能优化的话,c/c++/rust 肯定是优势巨大,比如早期的数据库对比,es 也有对比性能提升很大,至于为什么没有替换掉,就像你说的生态起来了,大公司也不需要这些性能优化,小公司根本没到性能瓶颈,但不代表没有性能优化
    BBCCBB
        26
    BBCCBB  
       2024-04-19 12:06:24 +08:00
    luozic
        27
    luozic  
       2024-04-19 12:08:37 +08:00
    Lines of Code Report| v 2.00 T=55.34 s (458.9 files/s, 80943.9 lines/s)
    --- | ---

    Language|files|blank|comment|code
    :-------|-------:|-------:|-------:|-------:
    Java|19926|447750|382756|2927572
    AsciiDoc|2293|58597|16202|266892
    YAML|1808|24913|4338|228077
    Text|272|4521|0|26813
    Gradle|427|3009|3312|18242
    XML|85|597|1192|9831
    Properties|44|195|461|8876
    Groovy|62|1414|717|8061
    CSV|32|0|0|6413
    TOML|13|791|1041|4241
    Smalltalk|21|440|0|3974
    Markdown|116|1229|249|3157
    SVG|129|0|18|1870
    ANTLR Grammar|7|353|126|1586
    Bourne Shell|48|397|418|1506
    XSD|6|112|40|1499
    Velocity Template Language|16|81|277|871
    Python|4|91|68|433
    DOS Batch|17|131|41|406
    Bourne Again Shell|19|129|98|392
    Dockerfile|8|82|72|313
    CSS|3|30|3|294
    INI|8|25|0|294
    SQL|12|6|561|285
    TypeScript|5|62|11|244
    PowerShell|3|27|21|154
    Lisp|1|10|0|78
    C|1|15|14|57
    HTML|4|2|14|45
    JavaScript|2|6|1|31
    C/C++ Header|1|5|7|5
    Freemarker Template|2|0|0|5
    Mustache|1|0|0|5
    diff|1|0|8|5
    --------|--------|--------|--------|--------
    SUM:|25397|545020|412066|3522527
    DefoliationM
        28
    DefoliationM  
       2024-04-19 12:17:03 +08:00 via Android
    luozic
        29
    luozic  
       2024-04-19 12:24:51 +08:00
    @jiangwei2222 还真不是,了解一下 dpdk 加持的 scylladb
    https://opensource.docs.scylladb.com/stable/using-scylla/migrate-scylla.html#

    甚至 io_uring 这种新的系统层面的东西。现代系统和硬件已经进化太多了,但是现在的大部分软件 中间件还是基于 c10k 的主要技术编制的,根本无法充分利用新硬件 新系统特性
    https://github.com/0voice/kernel_new_features/blob/main/io_uring/%E6%96%87%E7%AB%A0/%E6%B5%85%E6%9E%90%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E4%B9%8Bio_uring.md
    wdlth
        30
    wdlth  
       2024-04-19 14:27:48 +08:00
    除了 ES 和底层的 Lucene ,还有分析器、分词器、检索插件等等一堆东西,写完还得做各个平台的测试验证,要完善的东西多着呢,难道用 Rust/GO 就容易维护了?
    1018ji
        31
    1018ji  
       2024-04-19 14:39:51 +08:00
    我还是用 es 吧,生产又不花我的钱
    wysnxzm
        32
    wysnxzm  
       2024-04-19 14:52:59 +08:00
    @wdlth #30 总有人把工程问题理解成语言问题,没办法
    luozic
        33
    luozic  
       2024-04-19 15:48:23 +08:00
    @wysnxzm 他问的问题有问题,完整的 copy 一个,
    1.如果不是配套 io_uring dpdk 等可以大力提升性能的东西,别人为啥要做,
    2.并且现在开源的都是 es 的子集,
    3.完整的复制一套需要的成本 收益从哪里获取? 学习 scylladb 这种开源 收费都搞的? 关键是 elastic search 这一坨 还需要功能完整,还不想出钱做的大部分不是中国的公司?
    luozic
        34
    luozic  
       2024-04-19 15:50:40 +08:00
    反而是 redis 这种,工程规模小,可以快速获取收益的---dpdk/io_uring 的,现在一堆开源的竞争方案。国内也有不少
    isnullstring
        35
    isnullstring  
       2024-04-19 16:03:11 +08:00
    ES 出来这么久,用其他语言重新实现一次,怕是又要好多年才赶得上
    kneo
        36
    kneo  
       2024-04-19 16:30:21 +08:00 via Android
    @jiangwei2222 这几条我看没一条是有说服力的。

    1. 实现一个类似 es 的产品,es 用 lucene 不等于别人也一定要用 lucene 。
    哪怕真实现一个 lucene 也不难,根本不是难点。这东西架构很清晰,测试完备,也没有什么移植性的困难,照着抄就是了。甚至用工具代码转译都行。

    2. 逻辑完全不对。你这话就相当于来句“用 java 的谁在乎那点内存啊”,然后得出结论:“用别的语言做这个没有意义”。

    3. 该优化的都优化了?拿个汇编写也没你快?说的我都笑了。同样的逻辑:Python 这么多年了,该优化的都优化了……

    4. 问问 op 同意不?
    sdsaaeee
        37
    sdsaaeee  
       2024-04-19 16:59:34 +08:00
    meilisearch 啊,golang 写的
    rust
        38
    rust  
       2024-04-19 17:13:00 +08:00
    @sdsaaeee #37 要不是我昨天刚改完它的代码,我就信你了,这货明明是 Rust 写的
    hmmmbiubiubiu
        39
    hmmmbiubiubiu  
    OP
       2024-04-19 17:20:16 +08:00 via iPhone
    @kneo 哈哈 感觉 golang 或者 rust 更更好的压榨 CPU 。不一定 1:1 复制 es 至少在实现上会更优秀一些。另外 es 这么久了肯定有一些历史包袱吧
    Xinu
        40
    Xinu  
       2024-04-19 17:24:54 +08:00
    @pchalme 这个中文搜索基本不可用,分词完全不行。
    luozic
        41
    luozic  
       2024-04-19 17:26:44 +08:00
    确定搞了个高性能的,投资大量的方案,能收回投入?


    scylladb 可是一直有个大力应用和给钱的 uber discord compast ,
    国内用户还比这几个高,也大量用 elastic search 好几个。

    好几年了,有听说啥支持 els 重写为高性能的 c++/rust golang 版本的?
    luozic
        42
    luozic  
       2024-04-19 18:05:00 +08:00
    @jiangwei2222 scylladb 可一点都不同意你的说法,discord 的人也不会同意你的描述
    https://www.infoq.cn/article/iyivdO40iQ0wEKk4O94I?utm_source=related_read_bottom&utm_medium=article

    这个就是用 dpdk c++重写了 Cassandra 。

    那堆 python 验证算法,之后用 c++/rust 重写算子的 AI 可不少
    javaisthebest
        44
    javaisthebest  
       2024-04-19 23:08:47 +08:00
    看我 ID

    有的时候 你的思考下 为什么这些中间件选择了 java

    而不是 java 选择了这些中间件
    sdsaaeee
        45
    sdsaaeee  
       2024-04-23 14:31:17 +08:00
    @rust 哈哈,忘记了,不过确实轻量好用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3776 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:12 · PVG 13:12 · LAX 22:12 · JFK 01:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.