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

对于一个新的个人项目,你会如何选择数据库(MariaDB/MySQL/PostgreSQL)?

  •  
  •   CoronaZero · 242 天前 · 5674 次点击
    这是一个创建于 242 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请将讨论范围限定于 MariaDB/MySQL/PostgreSQL 这三者之间,并假设此项目对数据库有一定的性能要求? 如何权衡性能与成本(包括服务器成本、学习成本与后期维护成本)来进行选择呢?

    77 条回复    2024-05-12 23:52:33 +08:00
    xarthur
        1
    xarthur  
       242 天前 via iPhone   ❤️ 25
    先用 Sqlite ,如 Sqlite 不够用在用 PostgreSQL
    aagaguai
        2
    aagaguai  
       242 天前
    我是喜欢 mysql
    timethinker
        3
    timethinker  
       242 天前   ❤️ 5
    既然是个人项目,从严谨程度上来讲可以随意一些,没有必要在这个上面耗费太多的时间,与其在一开始考虑太多,倒不如多学习一下表结构设计相关的知识。

    不过当你提到性能相关问题的时候,严谨的来说基准测试才是唯一的答案。如果你没有任何数据库相关的经验,我更推荐 MySQL ,它容易学习,相比 PostgreSQL ,虽然没有那么多复杂特性,但是久经考验,足以应付常见的需求,最重要的是,它使用人群足够多,你能遇到的任何问题,基本上在网上都能找到相关的问答,从维护成本上来看,更多的资料也就意味着更快的解决效率。
    Aiurvia
        4
    Aiurvia  
       242 天前   ❤️ 2
    SurrealDB
    pandaidea
        5
    pandaidea  
       242 天前 via iPhone
    PostgreSQL
    qfdk
        6
    qfdk  
       242 天前   ❤️ 1
    问题是 都是关系型数据库... 那就选个自己熟悉的. 如果都不熟悉,就百度搜一下,看看哪一个讨论的人多就好了
    yidinghe
        7
    yidinghe  
       242 天前 via Android
    前面提到 SurrealDB 的请注意了,它不是一个关系数据库。
    shallyy
        8
    shallyy  
       242 天前 via iPhone
    单纯使用建议 MySQL
    二次开发产品可以考虑 PG
    很多国产数据库都是基于这两种数据库开发的
    cmdOptionKana
        9
    cmdOptionKana  
       242 天前   ❤️ 1
    个人项目为什么不用 Sqlite ?
    paranoiagu
        10
    paranoiagu  
       242 天前 via Android
    pg ,后续换信创方便
    chendy
        11
    chendy  
       242 天前
    个人项目我选择 MongoDB
    因为做不了多大,文档数据库一把梭完全够用
    macaodoll
        12
    macaodoll  
       242 天前 via Android
    首选 PostgreSQL
    wssy001
        13
    wssy001  
       242 天前
    首选 mysql 它教程多,学习成本比较低,后期维护也比较方便
    数据库性能更多地取决于服务器硬件与你的 SQL 水平,再不济,可以用 Redis 缓解 前提是你个人项目数据量能到 1kw+,但我觉得个人项目不需要考虑数据库性能
    dayeye2006199
        14
    dayeye2006199  
       242 天前
    postgres ,还有功能比这个更多的吗?
    你当 noSQL 都能使,向量数据库也行,全文搜索也行

    在你变成成功公司前,你甚至只需要这个数据库
    Ackvincent
        15
    Ackvincent  
       242 天前
    PGSQL YYDS ,
    zhy0216
        16
    zhy0216  
       242 天前 via Android
    postgres 拓展好很多
    无论之后是玩时序,向量还是分布式都有选择
    daysv
        17
    daysv  
       242 天前
    sqlite yyds ,啥时候不用了, 那你大概也发家了
    shinession
        18
    shinession  
       242 天前
    pg +1
    ma836323493
        19
    ma836323493  
       242 天前
    sqlite 赞一个, 轻松便捷
    encro
        20
    encro  
       242 天前
    PostgreSQL 就挺好的,
    装个插件就成了分析型数据库,
    还可以物化视图。
    jinker
        21
    jinker  
       242 天前
    sqlite 太容易嵌入了,规模大了再考虑其他的吧。
    yy77
        22
    yy77  
       242 天前
    个人用本地开发的推荐一个 duckdb 。和 sqlite 很类似,多了不少方便的数据导入导出功能。

    如果仅限楼主提的这 3 个,还是 mysql 吧。云服务商里 mysql 的实例也是相对最便宜的。出版、电子书等也较多。
    rahuahua
        23
    rahuahua  
       242 天前
    首先选你最熟悉的,其次是更多人熟悉的
    hnliuzesen
        24
    hnliuzesen  
       242 天前
    推荐一个 supabase 的 免费 pg ,省得装了,方便尝试。
    其实不用各种数据库的高级特性,SQL 都是兼容的,而且现在有了 LLM ,就算一些 SQL 用了特殊的关键字,也能很方便的翻译到其他数据库。
    debuggerx
        25
    debuggerx  
       242 天前   ❤️ 2
    MySQL 简单稳定可能是国内那帮搞互联网的说的最大的谎言。
    MySQL 看上去简单,实际上限制和坑比 PG 多不少,简单写个 demo 随便跑跑可能还体验不出区别,稍微做点像样的项目差距就出来了。MySQL 一大堆的文章和中间件方案,很多都是因为自身的缺陷和问题产生的,其实只要耐着性子把文档看完,学习使用 PG 所要花的精力并不会比学 MySQL 然后各种避坑花的精力多,使用过程中也更加自由,不会多写两个 join 就要担心会不会性能下降。
    uniquecolesmith
        26
    uniquecolesmith  
       242 天前
    不用犹豫,选 PG - 正确的选择,未来你会感谢 v 友
    coolcfan
        27
    coolcfan  
       242 天前   ❤️ 1
    性能方面得按照你们自己的业务去做基准测试。

    如果测试用的数据是生成的,要小心。我曾经遇到过一个问题,就是在我们的测试数据上,有个查询直接让 MySQL 的 CPU 占用冲到 90%多,但在 PostgreSQL 上就不会(小于 10%)。后来发现是因为我们的测试数据生成的太差,导致这个表上所有跟该查询沾边的索引都无法过滤掉任何行(也就是说查询会返回整个表),在这个情况下,MySQL 的优化器尝试的索引查询就变成了累赘……然而这种极端的数据在真实世界基本不会存在……
    iOCZS
        28
    iOCZS  
       242 天前
    论性能,据说还是微软的强。但是偶尔 CPU100%
    haython
        29
    haython  
       242 天前
    看你对数据库的定义是什么,如果定义就是简单存取,推荐 MySQL
    CoronaZero
        30
    CoronaZero  
    OP
       242 天前
    @iOCZS #28
    是的,微软的技术力倒是没的说,但是免费版本似乎有核心数限制和单表大小限制?
    对于个人项目来说感觉确实好贵
    x86
        31
    x86  
       242 天前
    mysql 吧,先建立起来再说性能
    PS:有些人建个 blog 个位数 ip 就考虑主机性能线路各种优化,/??/
    horizon
        32
    horizon  
       242 天前
    PostgreSQL
    Mithril
        33
    Mithril  
       242 天前
    最近几年的趋势就是,当你不知道选什么的时候,就选 Postgres 。除非你有特定理由,要换 MySQL 或者其他的什么东西,不然直接无脑 pg 。

    当然个人项目肯定优先 SQLite 。而且当你想拿出去打包卖拷贝的时候,MySQL 那 License 也是麻烦。
    0o0O0o0O0o
        34
    0o0O0o0O0o  
       242 天前
    PostgreSQL
    Mithril
        35
    Mithril  
       242 天前
    @CoronaZero 4 核心,单库 10GB 。
    一般来说当你的个人项目超过这个数据量的时候,你也应该考虑付费了。
    gimp
        36
    gimp  
       242 天前
    PostgreSQL
    Philippa
        37
    Philippa  
       242 天前   ❤️ 1
    简单实用 mysql 和 postgres 没区别,起个 k8s/k3s 环境(几分钟)然后安装任意一个数据库都是几分钟内解决了。这么一弄,sqlite 的便利性对比起来其实没啥优势。另外 mysql 和 postgres 有网络连接,比 sqlite 复制文件方便多了。如果真的上线,postgres 和 mysql 配置好直接用,sqlite 还得迁移回 mysql 和 postgres ,这些细细碎碎的杂活反倒比较花时间。

    综合来说选 postgres 。
    CoronaZero
        38
    CoronaZero  
    OP
       242 天前
    @Mithril #35
    这倒是没错,不过上次看到别人一个项目把图片 Excel 表格 word 文档等等等等都直接用 MySQL 存储二进制...
    感觉这样的话似乎很容易就会突破单库大小限制.(当然我肯定不会这么用数据库就是了)
    Mithril
        39
    Mithril  
       242 天前
    @CoronaZero 确实是有这种做法,优点就是你当你需要存文件的时候,不需要关心数据库记录和文件存储是否能对的上,是否需要做 hash 验证。同时只要能 commit ,那你这文件就算存上了。

    但缺点也很明显,就是数据库文件本身会变得非常的大。但多数允许你把文件存进来的数据库,你存一堆文件也不会影响性能。

    只要能搞定备份,那你直接把文件也存进去还是很方便的。
    yekern
        40
    yekern  
       242 天前   ❤️ 1
    个人项目 首先服务器资源就没有那么多, PG 比 MYSQL 资源占用要少,尤其是 MYSQL8.0 以后 是内存大户 ,而且两个使用起来也没啥太大差别 不管是 Docker 还是源安装也都很简单, 建议 PG
    jeesk
        41
    jeesk  
       241 天前
    可能是我写 java 太多, 这种 数据层喜欢用接口来做,至于 数据源真的无所谓.
    hello2090
        42
    hello2090  
       241 天前
    盈利 10 万以下 MySQL
    10 万-1000 万 MariaDB
    1000 万以上 PostgreSQL
    13240284671
        43
    13240284671  
       241 天前
    mysql
    key0323
        44
    key0323  
       241 天前
    @Mithril #33 请问这个趋势是在哪看到的,不是质疑,只是提问哈
    lujiaxing
        45
    lujiaxing  
       241 天前
    看你什么类型的项目. 个人项目也分类型, 你得说清楚你是做什么.
    一般个人项目的规模你说有性能要求, 能有什么性能要求... 一天能有 100 个访问量么?

    如果只是博客或者类似的比较简单简易的产品, MySQL / MariaDB 就足够了. 记得不要把表设计的太复杂. 越简单越好. 最好拿 MySQL 当硬盘版 Redis 用...

    如果功能比较复杂, 比如进销存之类的系统, 或者电商, 推荐用 PostgreSQL. 如果你不想稍微复杂点的查询就要上 ES 的话, 就别用 MySQL / MariaDB.
    changdy
        46
    changdy  
       241 天前
    想简单省事..直接用 mysql
    毕竟什么样的 sql 都能执行..
    如果你有点追求..有点想法 .. 就用 pg....


    是在想不开 想拯救世界 就用 mariadb.
    asuraa
        47
    asuraa  
       241 天前
    个人项目统统 mysql 无他遇到问题各种文档可以快速修复好
    adoal
        48
    adoal  
       241 天前
    趁着你还是初学者,用 pg ,培养严谨的好习惯,养成技术品位。
    Pierro
        49
    Pierro  
       241 天前
    H2 or Sqlite
    wuwuta170
        50
    wuwuta170  
       241 天前
    我也是在用 sqlite 但发现更新代码的时候 把数据库都更新了。。
    xiaocaiji111
        51
    xiaocaiji111  
       241 天前
    资料多的,烂大街的,用起来比较好
    tyrad
        52
    tyrad  
       241 天前
    sqlite 0 成本迁移
    kakki
        53
    kakki  
       241 天前
    无脑 PG
    Mogamigawa
        54
    Mogamigawa  
       241 天前 via Android
    建议 sqlite ,就个人网站的那点访问量,sqlite 很轻松,
    而且 sqlite 占用内存小,网站不想要了就带着一个 db 文件跑路.

    https://m.okjike.com/originalPosts/5d08f1c41089930018730223
    forvvvv123
        55
    forvvvv123  
       241 天前
    sqlite
    care
        56
    care  
       241 天前
    @adoal 请问下有啥比较好的书籍或者教程可以帮忙推荐吗?
    unclemcz
        57
    unclemcz  
       241 天前 via Android
    个人项目的话首先考虑成本低的,自己搭建的话我会选 sqlite ,云上会选择 mysql ,纯粹是因为比较便宜,至于性能问题,碰到性能瓶颈的时候再考虑,而且大概率是自己的代码质量有问题,如果一个个人项目把主流数据库被用到性能瓶颈,我估计会每天梦中笑醒。
    Mithril
        58
    Mithril  
       241 天前
    @key0323 个人体验。
    前段时间在做选型调查的时候发现的。这俩数据库的历史都很长,你要是不限定时间,搜到的东西都非常多,而且大多都是过期的无效内容。
    只看最近几年内容的话,问答类的比如 reddit, hn 的 comment 或者 so 上,推荐的比较多的都是 postgres 。包括我前面说的那句“不确定选啥就无脑 pg”也是之前在 reddit 上看的。
    但数据库这东西你基本上不会换,比如创业就用 LAMP ,后续大概率也是 MySQL 。而且互联网企业用不着关心 GPL 的问题。但还有大量需要部署在客户那边的系统,这 License 就可能让法务合规找你麻烦。

    另外还有个人倾向问题,之前看 hn 的帖子有人也说,他之所以推荐用 mysql ,就是因为 mysql 坑多。他自己有经验积累,知道怎么避坑。这样用的人越多,他就越不会失业。
    当然这也只是那个人的理由,也不是每个推荐 MySQL 的都这么想。

    总而言之,你可以搜一下最近几年的讨论,和十年前无脑推 MySQL 的差的还是很多的。
    adoal
        59
    adoal  
       241 天前
    @care

    有空可以看看两本老书:《 SQL 沉思录》、《 SQL 反模式》。
    OliverDD
        60
    OliverDD  
       241 天前 via iPhone
    就凭它一堆不遵守 sql 标准的怪语法,请避免使用
    OliverDD
        61
    OliverDD  
       241 天前 via iPhone
    @OliverDD mysql ,忘记打了
    qviqvi
        62
    qviqvi  
       241 天前
    会哪个用哪个,都不会则 postgre ,毕竟是三者中最受欢迎且性能最好且功能最强大的。其余两个会一个另一个也差不多会了,好像 mariadb 性能稍微好一点
    Mogamigawa
        63
    Mogamigawa  
       241 天前 via Android
    麻烦题主说说最后选了哪款数据库,谢谢
    ericguo
        64
    ericguo  
       241 天前
    PG ,现在( 2024 年)还要考虑其他数据库? PG 通过插件化的体系结构,还有赶上 AI 的向量数据库,前几天 MariaDB 的高级开发人员都跑过来做 PG 的 MySQL 兼容模式了。
    Lixiaobai233
        65
    Lixiaobai233  
       241 天前
    我会选 MySQL ,可能也是用惯了
    FightPig
        66
    FightPig  
       241 天前
    用了好多年 pg
    ihciah
        67
    ihciah  
       241 天前
    单机的话 sqlite 就行,通常你用的 sdk 会支持多种数据库实现,所以不够用了再迁移起来也蛮方便。
    ShuWei
        68
    ShuWei  
       241 天前
    单一节点项目,够用的情况下,sqlite 方便,优先考虑,其次考虑 pg
    CoronaZero
        69
    CoronaZero  
    OP
       241 天前
    @Mogamigawa #63
    postgreSQL 吧,感觉这个推荐的人很多?
    会提这个问题是因为最近在维护一个用了 MySQL 数据库的项目,版本还挺老,所以就来 V 站提问一下,顺便方便我自己以后的技术方向选择.
    CoronaZero
        70
    CoronaZero  
    OP
       241 天前
    @ericguo #64 这倒是,不过老项目挺多用 MySQL 的...维护起来的话也要了解一些 MySQL 方面的知识
    nm1st
        71
    nm1st  
       241 天前
    nightsky
        72
    nightsky  
       241 天前
    我们用.NET 的基本上不挑数据库,基本上 ORM 都支持无缝切换各种主流数据库。
    如果是我,前期会用 MySQL ,后期如果赚到钱了,就用 sql server
    CoronaZero
        73
    CoronaZero  
    OP
       241 天前 via Android
    @nightsky #72 .net 的话,是用 EF core 嘛?我这阵子在学习 .net ,感觉是个很强大的平台
    nightsky
        74
    nightsky  
       240 天前
    @CoronaZero #73 EF Core ,Freesql 之类的,基本都是可以无缝切换数据库
    flmn
        75
    flmn  
       235 天前
    PostgreSQL
    likeman
        76
    likeman  
       228 天前 via Android   ❤️ 1
    一步到位,直接 pg ,熟悉新特性,并且数据量没达到大数量的千万级,pg 自带的 memory 缓存都够了,不用上 redis
    psyer
        77
    psyer  
       228 天前 via Android
    跑个题,我司几千万级别的数据都在使用 MySQL😅 查询起来无敌慢,感觉从语句来讲没地方优化了,而且还是单一节点,经常出故障被客户投诉,不知道有的领导🧠怎么想的🤦‍♂️
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:28 · PVG 12:28 · LAX 20:28 · JFK 23:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.