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

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

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

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

    为什么飞机那么大,自行车这么小,都是交通工具,自行车跑三天都到不了,飞机三个小时就到了。只能考虑坐飞机了,但是这东西也太贵了。
    lbp0200
        44
    lbp0200  
       2024-01-26 17:00:05 +08:00
    @netnr 换 DuckDB

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

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