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

大家有用 Sqlite 的吗,都是什么场景下要用这个,能说一两点非要用它的理由最好啦

  •  
  •   papaer · 114 天前 · 5268 次点击
    这是一个创建于 114 天前的主题,其中的信息可能已经有所发展或是发生改变。
    55 条回复    2022-03-04 09:35:38 +08:00
    LANB0
        1
    LANB0  
       114 天前   ❤️ 1
    嵌入式设备,内存、CPU 和 flash 性能都有限,跑不了大型数据库。主要以 C/C++开发,sqlite 有良好的 C 接口提供。
    adoal
        2
    adoal  
       114 天前
    不用部署,就一个本机数据文件。
    roundgis
        3
    roundgis  
       114 天前 via Android
    server side

    mobile app

    就是方便而已

    https://sqlite.org/whentouse.html
    watcher
        4
    watcher  
       114 天前
    server side
    lisongeee
        5
    lisongeee  
       114 天前   ❤️ 2
    android 默认支持 Sqlite ,所以用 Sqlite ,另外本地应用存储数据量大的时候也适合 Sqlite ,用 json 或者 xml 这类只能整存整取,数据量大的时候会 io 阻塞比较严重
    iyear
        6
    iyear  
       114 天前 via Android
    单文件应用工具用着真的爽,应用本身性质也决定了不用特别强的数据库。sqlite+go 真的爽
    BingoXuan
        7
    BingoXuan  
       114 天前
    你需要一个数据库的功能,但又不想或没条件启动独立数据库进程,那就选 sqlite 。python 有 sqlitedict 这个库,能把字典持久化。连 orm 都省了
    felixcode
        8
    felixcode  
       114 天前 via Android   ❤️ 1
    与大多数其他 SQL 数据库不同,SQLite 没有单独的服务器进程,可以按应用程序需求进行静态或动态连接。SQLite 直接读取和写入普通磁盘文件,具有多个表,索引,触发器和视图的完整 SQL 数据库包含在单个磁盘文件中。
    wangtian2020
        9
    wangtian2020  
       114 天前
    electron 要存订单信息、作业信息,几百条数据。数据大到不适合 localstorage ,但又不至于上大数据库,数据库要在程序内置
    youthfire
        10
    youthfire  
       114 天前 via iPhone
    本地 Python+sqlite ,不连接外网,速度快
    RickyC
        11
    RickyC  
       114 天前
    数据库免安装,免部署。比如 showdoc 。
    icyalala
        12
    icyalala  
       114 天前
    手机里到处都是 sqlite ,比如 iOS/Android 的短信、通信录、邮件等数据都是 sqlite 存储的,各个 App 比如微信聊天记录、复杂配置也都是 sqlite ,无处不在。

    对于需要存储关系模型、需要查询、又没有太高的安全性和事务处理需求的地方,都适合用 sqlite ,移动端尤为适合。
    dooonabe
        13
    dooonabe  
       114 天前 via Android
    说个反例:现在做的仿知乎 web 项目,cto 让给每个用户的三四个用户相关表创建独立的 db ,曰提高并发,降低死锁概率
    wonderfulcxm
        14
    wonderfulcxm  
       114 天前 via iPhone
    买了个万网的那啥共享空间挂域名,想做点东西,一看,mysql 只有 50m ,那只能用 sqlite 了
    Vegetable
        15
    Vegetable  
       114 天前
    手机里多的是吧。你可以理解为,客户端需要使用数据库的时候,文件型数据库几乎是唯一选择。
    aegon466
        16
    aegon466  
       114 天前
    @iyear 请教下 我用 sqlite+go 在 win 上编译后放到 linux 运行不了 说是编译不了 gcc 是什么原因
    izzy27
        17
    izzy27  
       114 天前
    轻量呗,一些小项目用 sqlite 足够了
    zjj19950716
        18
    zjj19950716  
       114 天前
    @aegon466 要 cgo ,你可以用 pure go 版本的 sqlite 库,就是性能差点
    Nich0la5
        19
    Nich0la5  
       114 天前
    主要是本地应用 内置到应用包不用额外部署,单线程下性能不错,没有用户权限体系。反正你当个更高级的配置文件用就好
    ps 高并发下不建议用,之前我们的 gitea 后端是个 sqlite 天天卡住,换 mysql 就没事了
    wangjiang
        20
    wangjiang  
       114 天前
    @wangtian2020 #9 为啥不用 IndexDB
    CoCoMcRee
        21
    CoCoMcRee  
       114 天前
    app 内置数据库, 大量数据 app 本地存储, 就是用的 sqlite
    cmdOptionKana
        22
    cmdOptionKana  
       114 天前
    sqlite 优点多:稳定可靠(真的身经百战,极难撞到 bug 了)、运行效率高占用资源小、备份容易、支持广泛(几乎一切语言都可以操作同一个数据库文件)、关系型数据库功能比 kv 多,便于编程。

    虽然 kv 数据库也具有 sqlite 的多数优点,但 kv 通常用起来是麻烦一点,很多操作需要额外编程处理。
    libook
        23
    libook  
       114 天前
    见到最多的场景就是客户端上需要比较强的数据查询能力,跑个常规数据库太重了,SQLite 比较轻量,容易打包到客户端安装包里,跟常规关系型数据库的使用方式差别较小。

    还有一个场景是做原型产品,很多 ORM 可以支持多种数据库,避免折腾常规数据库服务可以先挂个 SQLite ,后面产品化的时候迁移到正式数据库成本也不会很高。
    littlewing
        24
    littlewing  
       114 天前
    客户端 APP 本地保存一些数据
    Akitora
        25
    Akitora  
       114 天前 via Android
    @aegon466 cgo 开启时默认不支持交叉编译,可以试试用 wsl 编译
    imn1
        26
    imn1  
       114 天前
    “非要”这个词,估计只有“无网+便携”场景可以符合
    如果只是问选择理由
    0. 便携场景
    1. 我写了几个单机程序,基本都是用 sqlite ,因为没什么并发,没必要装服务端数据库
    2. 单用户不定设备同步,只需要同步一个数据库文件就可以了,因为单用户甚少同时操作两个设备。同时指的是秒级或更高频手动操作,不是指软件自动运算写数据库


    还有一个场景,但比较少见,就是目的是数据共享、分发给不定人群,至于他怎么用这些数据,并非主要目的,github 上一些项目就是这样,分享的不是代码,而是数据
    devld
        27
    devld  
       114 天前
    自己的小项目,想要一键无痛启动。
    GoLand
        28
    GoLand  
       114 天前 via iPhone
    单元测试用 sqlite 来 mock MySQL
    ackfin01
        29
    ackfin01  
       114 天前
    最主要就是方便啊 而且性能也满足
    dany813
        30
    dany813  
       114 天前
    小巧,方便
    leavic
        31
    leavic  
       114 天前
    不需要服务器
    kingfalse
        32
    kingfalse  
       114 天前
    各种工控客户端机器,手机 app,等
    james2013
        33
    james2013  
       114 天前
    android 手机上就这个数据库最方便好用
    smallpython
        34
    smallpython  
       114 天前
    sqlite 这种文件型数据库有对应的 nosql 吗
    37Y37
        35
    37Y37  
       114 天前 via Android
    我的博客数据库就用的 sqlite ,小巧方便,不用安装
    bthulu
        36
    bthulu  
       114 天前
    典型案例: 微信客户端
    star7th
        37
    star7th  
       114 天前
    我的开源软件 showdoc:

    https://github.com/star7th/showdoc

    就使用 sqlite .

    showdoc 使用 Sqlite 的理由如下:

    PHP 环境默认支持 Sqlite ,所以只需要安装好 PHP 环境,即可使用 showdoc ,无须再安装 mysql 。这对于不懂 mysql 的开发者(如 App 开发者)来说会更容易一些。同时方便官方维护 showdoc ,不用维护和测试两个数据库版本

    sqlite 的性能并不差,对于总项目数在一万以内的情况,基本不用考虑性能问题。所以完全足够普通公司或者团队的使用。关于对 sqlite 性能的质疑,可以参考这位不知名网友的文章 https://www.cnblogs.com/derekhan/p/10897421.html

    sqlite 数据库文件放在 /Sqlite 目录下,迁移和备份都十分简单,直接复制 /转移该目录即可
    MoeWang
        38
    MoeWang  
       114 天前 via Android
    博客,数据量小,单独开个数据库性能过剩,索性 sqlite ,缓存好了速度很快。轻量也好迁移。
    MarquesMa
        39
    MarquesMa  
       114 天前
    客户端里内嵌很常见,比如手机,桌面应用等等

    另外如果在服务器的话,存文件很不错

    还有就是小应用单台机器起步的时候也可以简单用下
    Buges
        40
    Buges  
       114 天前 via Android
    @aegon466 交叉编译可以利用 zig ( zig 受 go 启发,能像 go 一样简单的交叉编译 c 代码)
    https://dev.to/kristoff/zig-makes-go-cross-compilation-just-work-29ho
    imklay
        41
    imklay  
       114 天前
    @wangtian2020 #9 这种场景是不是也可以考虑 IndexDB ?
    shellc
        42
    shellc  
       114 天前
    我的回复在这里: https://v2ex.com/t/837714

    单立一贴的原因是,跑题说了另一件事
    Jason86
        43
    Jason86  
       114 天前
    移动端的项目
    soulzz
        44
    soulzz  
       113 天前
    blog 场景下

    迁移 blog 可能只需要 commit 下 docker 镜像 直接迁移就可以
    或者直接复制过去,没有任何迁移成本
    v2exblog
        45
    v2exblog  
       113 天前
    @star7th 这个开源真的很牛,上家公司离线环境用了很久
    wangtian2020
        46
    wangtian2020  
       113 天前
    @wangjiang
    @imklay
    indexDB 是啥我刚刚搜索之前还真不知道。应该没有 sqlite 作为一个有形的文件方便,我更新程序的话可以手动迁移数据库。
    吐槽:臭甲方提供的更新订单接口一次性返回 300+条数据,我一次性往 sqlite 中插入 1100+条数据,164KB 大小,node 线程要卡两秒钟(用了 Promise.all )
    tairan2006
        47
    tairan2006  
       113 天前
    各种客户端 /边缘端环境都经常使用,服务端倒是用得不多
    Ciallo
        48
    Ciallo  
       113 天前
    客户端开发我自己用过几次,或者是离线的工具或服务
    ilylx2008
        49
    ilylx2008  
       113 天前
    单机环境,copy 带走,批量写入性能不错。并发读写不行。
    jianghu52
        50
    jianghu52  
       113 天前
    我给人做了一个.net 的流水明细转化系统,为了存一些发票头,还用 sqlite 呢。一个轻,另外一个是不用在别人系统上装什么其他的东西。
    0x2CA
        51
    0x2CA  
       113 天前
    我这边是游戏开发,会用到,策划配表大量数据,全加载内存占用内存,而且加载慢,通常游戏进程原因只会用到配置一部分数据,所以选择 sqlite ,使用查询不占用内存直接获取配置是最好的选择,而且通常是只读不写,只做配置数据库
    biubiuF
        52
    biubiuF  
       113 天前
    本地数据
    jupiter157
        53
    jupiter157  
       113 天前
    数据有四个操作:创建,读取,修改,删除。
    数据可以以多种形式存储,比如常见的文本文件,格式可以是 json ,csv 或甚至二进制。它们的局限在于,对于任何数据操作,都需要整个文件读取,即使你只需要添加 /查询十万条记录中的某一条,因此效率十分低下。有些文件格式,例如 nc ,也支持片段读入,但是需要预先指定位置。
    鉴于此,数据库可以实现按需查询、读取和写入,减少 io 负担。
    sqlite 是很轻量化的数据库。
    sqlite 的缺点是:对高并发写入支持差;只能本地调用;支持数据不能太大(几十 G 没问题)

    应用场景是:需要经常更新和添加数据中的很小一部分;需要经常查询数据并返回一小部分。
    博客没必要上数据库,文本就够了。
    feelinglucky
        54
    feelinglucky  
       113 天前
    @GoLand 如果是 Java 技术栈的话,我还是习惯用 H2 来 mock 数据库做单元测试(话说兄弟的 ID 好亮眼,甚至怀疑是不是潜规则了站长,哈哈哈
    yiqiao
        55
    yiqiao  
       113 天前
    单元测试我用它
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2576 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:03 · PVG 16:03 · LAX 01:03 · JFK 04:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.