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

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

  •  2
     
  •   hmmmbiubiubiu · 243 天前 via iPhone · 6315 次点击
    这是一个创建于 243 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    45 条回复    2024-04-23 14:31:17 +08:00
    yyyxxx109876
        1
    yyyxxx109876  
       243 天前   ❤️ 3
    为什么你不用 golang 或者 rust 这种新一点的语言写一个类似 es 的程序啊
    hmmmbiubiubiu
        2
    hmmmbiubiubiu  
    OP
       243 天前 via iPhone
    哈哈 我感觉能力差点意思
    hmmmbiubiubiu
        3
    hmmmbiubiubiu  
    OP
       243 天前 via iPhone   ❤️ 1
    @yyyxxx109876 我的能力还驾驭不了感觉
    pchalme
        4
    pchalme  
       243 天前   ❤️ 3
    itstudying
        5
    itstudying  
       243 天前
    有呀 zincsearch go 写的,目前也就是正在研究替换 es 中。 es 太耗资源了。。。
    lsk569937453
        6
    lsk569937453  
       243 天前   ❤️ 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  
       243 天前
    想到一个曾经听到的一句话。


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

    对于又需要 es 的大部分功能,又想着新语言重写的,自己去看 es 是多大的一个代码项目,要重写即使有啥辅助你也得有多少人组织起来干活
    https://github.com/elastic/elasticsearch/commits/main
    jiangwei2222
        22
    jiangwei2222  
       243 天前 via Android   ❤️ 1
    1.因为 es 基于 lucene 引擎,lucene 就是 java 写的,如果重写的话就得连 lucene 一起重写了。工程量巨大,而且看不到任何优势
    2.在 es 的使用场景中,java 多占用那点内存根本忽略不计,比如我现在公司 es 集群都是大几十核,几百 G 内存的机器,干嘛要在乎编程语言那点性能?
    3.高性能在于代码设计,es 都迭代这么多年了,能优化的都优化了,你现在哪怕用汇编语言写一个 es 也不一定比现在性能好
    4.正经公司都有专业的运维人员,在专业运维看来,es 对运维很友好
    rahuahua
        24
    rahuahua  
       243 天前
    @lsk569937453 好奇问下 github 上提到的 rcache 和 redis 性能压测对比差异的主要原因是什么呀
    rahuahua
        25
    rahuahua  
       243 天前
    @jiangwei2222 性能优化的话,c/c++/rust 肯定是优势巨大,比如早期的数据库对比,es 也有对比性能提升很大,至于为什么没有替换掉,就像你说的生态起来了,大公司也不需要这些性能优化,小公司根本没到性能瓶颈,但不代表没有性能优化
    BBCCBB
        26
    BBCCBB  
       243 天前
    luozic
        27
    luozic  
       243 天前
    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  
       243 天前 via Android
    luozic
        29
    luozic  
       243 天前
    @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  
       243 天前
    除了 ES 和底层的 Lucene ,还有分析器、分词器、检索插件等等一堆东西,写完还得做各个平台的测试验证,要完善的东西多着呢,难道用 Rust/GO 就容易维护了?
    1018ji
        31
    1018ji  
       243 天前
    我还是用 es 吧,生产又不花我的钱
    wysnxzm
        32
    wysnxzm  
       243 天前
    @wdlth #30 总有人把工程问题理解成语言问题,没办法
    luozic
        33
    luozic  
       243 天前
    @wysnxzm 他问的问题有问题,完整的 copy 一个,
    1.如果不是配套 io_uring dpdk 等可以大力提升性能的东西,别人为啥要做,
    2.并且现在开源的都是 es 的子集,
    3.完整的复制一套需要的成本 收益从哪里获取? 学习 scylladb 这种开源 收费都搞的? 关键是 elastic search 这一坨 还需要功能完整,还不想出钱做的大部分不是中国的公司?
    luozic
        34
    luozic  
       243 天前
    反而是 redis 这种,工程规模小,可以快速获取收益的---dpdk/io_uring 的,现在一堆开源的竞争方案。国内也有不少
    isnullstring
        35
    isnullstring  
       243 天前
    ES 出来这么久,用其他语言重新实现一次,怕是又要好多年才赶得上
    kneo
        36
    kneo  
       243 天前 via Android
    @jiangwei2222 这几条我看没一条是有说服力的。

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

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

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

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


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

    好几年了,有听说啥支持 els 重写为高性能的 c++/rust golang 版本的?
    luozic
        42
    luozic  
       243 天前
    @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  
       242 天前
    看我 ID

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

    而不是 java 选择了这些中间件
    sdsaaeee
        45
    sdsaaeee  
       239 天前
    @rust 哈哈,忘记了,不过确实轻量好用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3335 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:23 · PVG 19:23 · LAX 03:23 · JFK 06:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.