V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  数据库

为什么 MySQL 软件本体这么大, SQLite 能做到那么小?

  •  4
     
  •   drymonfidelia · 313 天前 · 7224 次点击
    这是一个创建于 313 天前的主题,其中的信息可能已经有所发展或是发生改变。
    55 条回复    2024-03-04 19:46:38 +08:00
    James369
        1
    James369  
       313 天前   ❤️ 1
    好比电脑和手机,飞机和航模
    wheat0r
        2
    wheat0r  
       313 天前
    还能这么比
    Thiece
        3
    Thiece  
       313 天前
    应为功能少,存储过程、触发器、数据分区、网络访问、复制功能、事务管理 SQLite 实现的怎么样
    thevita
        4
    thevita  
       313 天前
    微信最初的版本 大小 457KB
    现在的微信已经 奔着数百兆去了

    而他核心功能基本差不多
    kirory
        5
    kirory  
       313 天前
    需求不同
    SQLite 会跑在各种设备上,MySQL 不用这样
    imydou
        6
    imydou  
       312 天前
    先不说复杂的,sqlite 才几种数据类型
    drymonfidelia
        7
    drymonfidelia  
    OP
       312 天前
    需求是把数据库打包进客户端(好几张表数据量都过亿条),SQLite 加各种索引都撑不住,查询一次三分钟,只能考虑把 MySQL 打包进去,但是这东西也太大了
    786375312123
        8
    786375312123  
       312 天前   ❤️ 2
    数据库打包进客户端?什么客户端?
    什么样的奇才会想出来这种构架。
    acapla
        9
    acapla  
       312 天前   ❤️ 1
    让我想起了 GTA Online 开始的十分钟 for loop.
    dyv9
        10
    dyv9  
       312 天前 via Android   ❤️ 6
    好奇,啥都客户端做了,你的服务器在做啥?如果没有服务器你为啥叫它客户端
    bkmi
        11
    bkmi  
       312 天前 via Android
    多大的数据量,说实话几十 G 的微信聊天记录搜索都能秒搜,SQLite 已经足够强了(微信用的是修改版的 SQLite ,有开源,叫 WCDB )
    hefish
        12
    hefish  
       312 天前
    @dyv9 老哥的灵魂一问,问的有道理。。。
    mightybruce
        13
    mightybruce  
       312 天前
    mysql 打入客户端 操作太神奇,你要调研几种嵌入式数据库, 而不是打包 mysql
    比如 WCDB 、Firebird
    netnr
        14
    netnr  
       312 天前 via Android   ❤️ 2
    换 DuckDB
    bianhui
        15
    bianhui  
       312 天前   ❤️ 1
    @dyv9 ?客户端一定要有服务端?想当然了吧,客户端的字面定义也就是客户所使用的端。有没有其它端毫无关联。
    Worldispow
        16
    Worldispow  
       312 天前 via Android
    oracle:你在说什么?
    bianhui
        17
    bianhui  
       312 天前   ❤️ 1
    工业软件很多内网环境使用,没有服务端很正常,要求有数据检索数据存储功能也很正常。安装后启动一个 mysql 也很正常。你可以尝试 mysql 作为可选依赖性,用户配置,默认使 sqlite 看能不能分库。或者用一些比较小的数据库发行版
    opengps
        18
    opengps  
       312 天前
    SQLlite 面向文件,mysql 面向进程
    gbw1992
        19
    gbw1992  
       312 天前
    @drymonfidelia #7 你这种不是 sqlite 的问题,最简单的处理方式就是分库。多数据库文件,客户机上固态硬盘。
    ucando
        20
    ucando  
       312 天前
    好几个表都过亿条, 我想单单是库文件就不小了, 再加 mysql 那点大小又算啥?
    XXWHCA
        21
    XXWHCA  
       312 天前
    它都带上 lite 字样了
    wanguorui123
        22
    wanguorui123  
       312 天前
    SQLite 轻量,只保留核心功能。
    dcsite
        23
    dcsite  
       312 天前   ❤️ 1
    @ucando 只有你发现了问题的重点! OP 几亿条数据,几个 G 的数据库,还去关注 MySQL 的大小,岂不是有些搞笑
    nothingistrue
        24
    nothingistrue  
       312 天前   ❤️ 1
    @bianhui #15 你要是真客户,术语解释会明明白白的将其限制为 Client - Server 中的 Client 。你要是程序员,那无需文档定义,约定上 Client 指的就是 Client - Server 中的 Client 。
    helllkz
        25
    helllkz  
       312 天前
    你赵鹏什么的都在踢中卫,他踢么?踢不了,没这个能力,知道吧
    weijancc
        26
    weijancc  
       312 天前
    楼上说得对, 可以用 DuckDB
    qiyilai
        27
    qiyilai  
       312 天前
    也没必要打包到客户端里吧,单独安装也行吧
    lifei6671
        28
    lifei6671  
       312 天前
    @786375312123 这是很常见的应用呀。很多 IOS 或 Android 的应用用来缓存本地数据会用到 sqlite 呀。你去看看微信的客户端,底层很多数据也是 sqlite 缓存的。
    june4
        29
    june4  
       312 天前
    数据量和一条 sql 几分钟没什么关系,你这肯定全表扫描了,上 mysql 即使更快也有限。主要还是索引没弄好或者本身是全表统计。
    以前呆过一家做企业软件的,里面的开发人员完全不懂索引优化,sql 随便写对执行计划怎样根本没这个意识。
    cccer
        30
    cccer  
       312 天前
    分表做好,我 20 亿数据 SQLite 没索引也是秒查,既然打包到客户端就不用考虑高并发问题。
    sujin190
        31
    sujin190  
       312 天前
    这数据量如果客户端安装不能保证内存充足和 ssd ,估计换 mysql 也提升不了多少,不知道你的客户端安装环境怎样,ToB 的话其实客户端大个几百兆无所谓,ToC 的话安装环境估计也无法保证资源充足似乎你换啥都意义不大吧
    wswlaz
        32
    wswlaz  
       312 天前
    一个服务端,一个客户端...... 你觉得呢......
    agagega
        33
    agagega  
       312 天前
    除了部署在服务器上这种需要并发访问的情况 SQLite 不适合,SQLite 其实是个相当强大的数据库,不要因为名字就瞧不起它。如果是在客户端保存一些数据的场景,用 SQLite 的性能几乎一定比自定义各种乱七八糟的格式或者序列化到 JSON/XML 然后一股脑 fwrite 到硬盘更好。
    flynaj
        34
    flynaj  
       312 天前
    SQLite 名字就暗示它小,适合少量数据。只支持基本的 sql,没有复杂功能,普通用户最多接触到的就是 chrome 类 ll 浏览器用来存用户数据,比起 ini 文件.自定义的 dat 文件,性能,操作性更好。
    drymonfidelia
        35
    drymonfidelia  
    OP
       312 天前
    @ucando
    @dcsite 软件本体和数据库是分开分发的
    drymonfidelia
        36
    drymonfidelia  
    OP
       312 天前
    @flynaj chrome 只有已经废弃的 indexeddb 用的是 sqlite 吧?用自定义的 dat 文件还需要自己写索引、删除数据逻辑吧
    drymonfidelia
        37
    drymonfidelia  
    OP
       312 天前
    drymonfidelia
        38
    drymonfidelia  
    OP
       312 天前
    wanqiangcrack
        39
    wanqiangcrack  
       312 天前
    没有白占的空间,也没有白吃的内存。
    whyrookie
        40
    whyrookie  
       312 天前
    @786375312123 客户端带个本地数据库,离线使用不是很常见吗?
    pkoukk
        41
    pkoukk  
       312 天前
    @dyv9 服务端只管登录和授权校验啊,想一下那些需要联网验证的游戏。
    cyningxu
        42
    cyningxu  
       312 天前
    是我重未设想过的问题,为啥 X86 芯片这么难造,51 芯片却能造出来?
    shunia
        43
    shunia  
       312 天前
    哈哈哈哈哈。

    为什么飞机那么大,自行车这么小,都是交通工具,自行车跑三天都到不了,飞机三个小时就到了。只能考虑坐飞机了,但是这东西也太贵了。
    lbp0200
        44
    lbp0200  
       312 天前
    @netnr 换 DuckDB

    我觉得吧,楼主能问这个问题,应该搞不定 duckdb
    nodejsexpress
        45
    nodejsexpress  
       312 天前
    明白楼主的需求。很多时候是客户需求和环境限制。
    sqlite 主要问题是当你文件太大时,程序启动载入太慢了。
    客户端,客户频繁打开的话,很难受得了。
    以前搞过一个项目,本来还 ok 的,后面也换了 mysql 。但不用打入客户端里面,只是单机离线。
    james122333
        46
    james122333  
       312 天前 via Android
    @ucando 但毕竞文字可压缩
    james122333
        47
    james122333  
       312 天前 via Android
    客户端频繁打开? 那应该是小问题
    wxf666
        48
    wxf666  
       312 天前
    楼主,放下你的 表结构 和 SQL 出来看看?
    geniussoft
        49
    geniussoft  
       312 天前 via iPhone
    虽然但是,SQLite 查询性能还是可以的,除非你需要的是 Oracle
    iv8d
        50
    iv8d  
       311 天前
    筷子跟瑞士军刀的区别吧,孩子有功夫想想别的
    iv8d
        51
    iv8d  
       311 天前
    下一条你是不是要问,为什么 Oracle 那么大,MySQL 却能做到那么小?
    lvlongxiang199
        52
    lvlongxiang199  
       311 天前
    @James369 有啥相似性吗 ? 有哪些是 MySQL 能做到, 但 sqlite 做不到的 ?
    wxf666
        53
    wxf666  
       311 天前
    @nodejsexpress SQLite 数据库文件就算大到 1TB ,也没事啊?又不是启动就要读完它?
    flowerains
        54
    flowerains  
       309 天前
    好奇 wcdb 国内 App 用的多不多

    Firebird 我是知道的
    nodejsexpress
        55
    nodejsexpress  
       274 天前
    @wxf666 作为客户端,用户经常关闭,打开。。。 不是 web
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1390 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:43 · PVG 01:43 · LAX 09:43 · JFK 12:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.