SQLite way to explore https:https://cdn.v2ex.com/navatar/1700/0029/292_normal.png?m=1645611998 https:https://cdn.v2ex.com/navatar/1700/0029/292_large.png?m=1645611998 2025-08-18T20:23:25Z Copyright © 2010-2018, V2EX 分享适合高并发场景的 SQLite 设置 tag:www.v2ex.com,2025-08-18:/t/1153321 2025-08-18T16:22:51Z 2025-08-18T20:23:25Z cj323 member/cj323 最近写了个对 sqlite 数据库读写都比较大且频繁的程序,踩了一些坑。最后用了如下配置最大化 sqlite3 的性能。

PRAGMA journal_mode = WAL; PRAGMA busy_timeout = 5000; PRAGMA synchrOnous= NORMAL; 
  1. journal_mode = WAL: 支持读写同时进行。高并发下提升最明显
  2. busy_timeout:可以缓解同时多写入时的 SQLITE_BUSY 报错。5000 是五秒。
  3. PRAGMA synchrOnous= NORMAL; 减小默认同步频率

内存够用的话还可以设置这两个选项加大内存缓存。

PRAGMA cache_size = 1000000000; PRAGMA temp_store = memory; 
]]>
在什么情况下一定要放弃 SQLite 采用 MySQL 呢? tag:www.v2ex.com,2022-09-30:/t/884005 2022-09-30T05:00:07Z 2022-10-04T02:46:11Z MrLonely member/MrLonely 现在在一家小公司里帮忙做一些数据处理,金融方面的。数据都是从人工处理过的 Excel 里来的。目前数据放进 SQLite 里大概数据库文件大小在 500MB 左右。后续可能会增长到几百 GB 。

因为 SQLite 简单,不需要解决配置,端口,用户名,等等复杂问题。即开即用。

那以后到了什么时候就该从 SQLite 换到 MySQL 了呢?或者换到 SQL Server ?

]]>
SQLite 背后的故事 tag:www.v2ex.com,2022-07-31:/t/869820 2022-07-31T14:23:13Z 2022-07-31T16:27:22Z join member/join https://liyafu.com/2022-07-31-sqlite-untold-story/
]]> 应该怎么理解 rowid 在 sqlite 中的使用 tag:www.v2ex.com,2022-07-13:/t/866001 2022-07-13T14:44:21Z 2022-07-13T14:44:21Z youthfire member/youthfire https://stackoverflow.com/questions/35876171/sqlite-rowid-after-deleting-rows
其中有段话我印象很深
The data for rowid tables is stored as a B-Tree structure containing one entry for each table row, using the rowid value as the key. This means that retrieving or sorting records by rowid is fast. Searching for a record with a specific rowid, or for all records with rowids within a specified range is around twice as fast as a similar search made by specifying any other PRIMARY KEY or indexed value.
总结起来:rowid - 也就是 true primary key 性能优势大

在 Sqlite 官网的 rowid table 中,又是这么阐述的:If the rowid is not aliased by INTEGER PRIMARY KEY then it is not persistent and might change. In particular the VACUUM command will change rowids for tables that do not declare an INTEGER PRIMARY KEY. Therefore, applications should not normally access the rowid directly, but instead use an INTEGER PRIMARY KEY.
总结起来:不应该直接使用 rowid

自己平时在操作 sqlite select row 的时候,一直都是直接用 rowid 来选取执行的,一开始是不知道 declare primary key as alias of rowid ,后来是发现没有使用场景用到。官网让不要 direct access 的原因是 rowid 有时候会变,比如 VACUUM 。我没有理解这句,我就是需要 rowid 重新 rebuild ,才会去用 VACUUM 的啊,否则当频繁操作添加,删除动作后,不进行 rebuild ,我再用语句操作 rowid ,可能就不是我真正需要操作的行。所以我才每次在这些动作后,都会进行 VACUUM 。主要是为了逻辑不出错,同时之后读取性能好,空间小。

但有时候 VACUUM 的时间会很长,可是不操作,此 rowid(true primary key )不是彼 rowid 啊,例如删除了第 6 行,如果不 VACUUM, 我想再操作新的第 6 行,这个时候 rowid 其实是 7 ,不是 6 ,就产生了逻辑问题啊。

阐述得略混乱,请见谅! ]]>
macOS 上有什么好用的 SQLite GUI ? tag:www.v2ex.com,2022-05-01:/t/850369 2022-05-01T07:29:50Z 2022-05-01T04:27:50Z phony2r member/phony2r 试了一下 sqlitestudio 和 db-browser, 都不好用而且界面也很丑

]]>
SQLite In-Memory 作为数据缓存代替 Java Object tag:www.v2ex.com,2022-04-07:/t/845542 2022-04-07T10:43:11Z 2022-04-07T10:45:21Z chenliang0571 member/chenliang0571 背景

RESTful API 需要从数据库读取很多基础数据,这些数据改动很少,所以加了一个缓存 x 分钟刷新一次。 目前是直接保存到 Java Object 的。

问题

API 各类请求都有。基础数据方面一般都要做一些数据处理然后再组合其他数据返回。简单的比如 sort ,复杂的要先 group by 然后在筛选等。 使用 Java Stream API 能做,但是感觉有点麻烦,不如 SQL 方便。


所以想到了 SQLite In-Memory ,如果把数据保存在 SQLite 内,那么查询会直观很多,而且感觉作为 In-Memory 的数据库,速度差异应该不大?

不知道有没有 v 友有相关经验可以分享的。

]]>
什么时候调用 sqlite.close()呢 tag:www.v2ex.com,2022-03-17:/t/841132 2022-03-17T14:57:08Z 2022-03-17T14:55:08Z EyebrowsWhite member/EyebrowsWhite 在 stack overflow 上搜了一下,回答比较少,而且看的不是很懂,特来问问诸位。

前提:只有一个数据库

主要考虑以下几种场景:

  1. 创建一个或多个新表
  2. 增、删、改 数据(使用事务)
  3. 查 数据

如果使用 Serialized Mode ,那么是不是无论什么时候都没必要去调用 close 方法,等着垃圾回收就是?

如果使用 Multi-thread/Single-thread Mode ,那么是不是需要在前两种场景下手动调用 close 呢?

]]>
回复“什么场景下用 SQLite”的主题并分享一个年收入 60 万刀的技术栈 tag:www.v2ex.com,2022-03-03:/t/837714 2022-03-03T07:43:06Z 2022-03-07T01:54:26Z shellc member/shellc 这位兄弟在问“大家有用 Sqlite 的吗,都是什么场景下要用这个,能说一两点非要用它的理由最好啦”

我觉得有必要分享一个人的故事(How Pieter Levels learned to code),这个叫 Pieter Levels 的哥们自学编程写了两个网站,目前已经做到每年收入 60 万刀。看看他的技术栈:

我之前接触过很多独立开发者和小团队,很多选择了非常重的架构,比如微服务、K8S 。其实,绝大部分创业项目最后都死掉了,创业团队把大量的时间浪费在了解决永远不可能发生的规模和复杂性问题上。他们臆想了一个甜蜜的烦恼,并花了大量的时间和钱来试图解决它。

也有一些开发者很务实的选择了 serverless 、django ,快速 rush 出一个 MVP ,发现商业不可行就快速扔掉。

我多年前看《黑客与画家》,Paul Graham 说 Lisp 和 Python 才是创业公司该用的语言,其实我并不理解,我那时候还在 C++性能更好的认知里。最近两年大热的 No-Code 和 Low-Code ,我也没有太深的体会。

直到最近半年,我自己用 Go 和 Python 写了两个失败的项目,我才明白了。对于以商业成功为目标的项目,快速试错,降低写代码的成本是多么重要。

]]>
大家有用 Sqlite 的吗,都是什么场景下要用这个,能说一两点非要用它的理由最好啦 tag:www.v2ex.com,2022-03-03:/t/837599 2022-03-03T01:54:06Z 2022-03-03T14:33:28Z papaer member/papaer SQLite Viewer Web App tag:www.v2ex.com,2022-02-23:/t/835996 2022-02-23T10:24:38Z 2022-03-19T10:42:19Z Livid member/Livid
使用了浏览器的原生文件系统 API 来打开 .sqlite 文件。

也可以作为 PWA 安装。

https://sqliteviewer.app/ ]]>
本地数据库 除了 SQLite 还有什么好用的. tag:www.v2ex.com,2021-08-24:/t/797813 2021-08-24T16:02:33Z 2021-08-25T03:10:30Z zyxk member/zyxk 好像就 SQLite 最优解了吧,有没有其他的呢, ]]> 请教一个方案,边缘设备的 sqlite 数据如何才能获取到 tag:www.v2ex.com,2021-08-17:/t/796202 2021-08-17T01:34:03Z 2021-08-19T01:37:42Z jk1030 member/jk1030 1.由于网络和环境。没有办法实时存到数据节点,只能存在本地的 sqlite,
2.数据情况比较特殊,不能使用 mqtt 协议等

目前想到的是是不是只能在设备上搞一个 sqlite 的代理服务了 ]]>
有人知道怎么在 termux 上编译 sqlcipher 吗? tag:www.v2ex.com,2020-08-07:/t/696413 2020-08-07T03:53:35Z 2020-08-07T21:15:57Z lxk11153 member/lxk11153
  • 首先排除 pkg install sqlcipher ,谢谢
  • 或者找到能在 Android-6 上可运行的 binary
  • ]]>
    求一个数据库设计问题! tag:www.v2ex.com,2019-08-02:/t/588683 2019-08-02T17:49:09Z 2019-08-02T17:46:09Z Iamnotfish member/Iamnotfish | Department | Sub-department | Category | Unit |
    | ---------- | -------------- | -------- | -------- |
    | Id | Id | Id | Id |
    | Name | Name | Name | Name |
    | Position | Position | Position | Position |
    | Active | | | |

    一共四张表,关系从左至右都是一对多。现在我问题是如果我添加外键用来链表的话,unit 这张最小的表的数据量将会非常大而且很多都是重复的。四张表的具体数据如下:
    Department | Id | Name(STR) | Position(INT) | Active(INT) |
    | ---- | --------- | ------------- | ----------- |
    | 1 | AAA | 1 | 0 |
    | 2 | BBB | 2 | 0 |
    | 3 | CCC | 3 | 1 |
    | 4 | DDD | 4 | 1 |

    Sub-department
    | Id | Name(STR) | Position(INT) |
    | ---- | --------- | ------------- |
    | 1 | AAA | 1 |
    | 2 | BBB | 2 |
    | 3 | CCC | 3 |
    | 4 | DDD | 4 |

    Category
    | Id | Name(STR) | Position(INT) |
    | ---- | --------- | ------------- |
    | 1 | AAA | 1 |
    | 2 | BBB | 2 |
    | 3 | CCC | 3 |
    | 4 | DDD | 4 |

    Unit
    | Id | Name(STR) | Position(INT) |
    | ---- | --------- | ------------- |
    | 1 | AAA | 1 |
    | 2 | BBB | 2 |
    | 3 | CCC | 3 |
    | 4 | DDD | 4 |

    请问一下我该怎么修改我的表的结构避免重复数据产生呢?

    补充一下!具体的业务是类似于路径查找那样的,点开我的电脑然后显出出来所有的在我的电脑下的文件夹,然后选择不同的文件夹进入里面在进入到子文件夹这样。

    ]]>
    SQLite 被曝漏洞,影响范围很大 tag:www.v2ex.com,2019-01-28:/t/531196 2019-01-28T04:23:45Z 2019-01-28T04:20:45Z hxt member/hxt
    SQLite 是一款基于磁盘的关系数据库管理系统,几乎可与所有设备、平台和编程语言兼容。截至目前,已有数百万应用程序使用 SQLite 完成了数十亿次安装,众多物联网设备、Windows 应用程序、mac OS 及 Web 浏览器易受影响。比较典型的是基于 Chromium 的浏览器,包括 Google Chrome、Vivaldi、Opera 和 Brave 等主流浏览器受到影响。

    如果用户使用了没有修复漏洞的浏览器或者 APP,一个很常见的场景就是,打开攻击者的网站(或者扫描二维码),攻击者就可以远程在用户的浏览器或者 APP 里执行任意命令。

    https://blade.tencent.com/magellan/index.html ]]>
    两个读写 SQLite 数据库的浏览器扩展 tag:www.v2ex.com,2018-10-14:/t/497522 2018-10-14T08:16:01Z 2018-10-14T08:13:01Z dalieba member/dalieba http://add0n.com/sqlite-manager.html
    http://mybrowseraddon.com/sql-reader.html ]]>
    How SQLite is tested tag:www.v2ex.com,2012-11-18:/t/52719 2012-11-18T13:16:39Z 2012-11-18T13:16:39Z Livid member/Livid http://sqlite.org/testing.html ]]> 如果需要寫入數據, 不僅數據文件要有寫入權限, 數據文件所在的目錄也要有寫入權限 tag:www.v2ex.com,2012-06-20:/t/40127 2012-06-20T17:15:25Z 2012-06-20T17:15:25Z 013231 member/013231 所以呢, 如果數據文件所在的目錄沒用寫權限, journal文件無法創建, 就無法寫入數據了.

    在Python sqlite3 Package中, 會拋出一個頗有誤導性的Error:
    OperationalError: unable to open database file
    然而真正的錯誤原因並不是無法打開數據文件, 而是無法創建日誌文件.
    被這個問題折騰了半天... ]]>
    用sqlite3作为论坛的数据库行不行? tag:www.v2ex.com,2012-06-14:/t/39535 2012-06-14T15:47:59Z 2013-03-31T02:44:02Z yetone member/yetone About Sqlite 之前的一篇笔记 tag:www.v2ex.com,2012-04-25:/t/33481 2012-04-25T02:47:50Z 2012-04-25T02:47:50Z jyoe member/jyoe 1001 wget http://www.sqlite.org/sqlite-autoconf-3071100.tar.gz
    1002 tar zxvf sqlite-autoconf-3071100.tar.gz
    1003 cd sqlite-autoconf-3071100
    1008 ./configure
    1009 make
    1010 make install

    sqlite3 test // 没有就创建这个db 有了就进入该db 我靠 好灵巧
    木有show tables; 但可以用.tables or .table
    木有show databases; 但有.databases;
    sqlite> .schema
    CREATE TABLE user(id integer primary key,username text ,country text);
    CREATE TABLE user_card(id integer primary key,username text ,country text);
    sqlite> .schema user
    CREATE TABLE user(id integer primary key,username text ,country text);

    这让show create table xxx 情何以堪...


    order by 啥的还都正常

    DataType可怜 但精巧够用
    NULL
    INTEGER
    REAL
    TEXT
    BLOB
    但貌似也支持date time啥的这些常规Type


    About Create Index
    CREATE [UNIQUE] INDEX index-name
    ON [database-name .] table-name (column-name [, column-name]*)
    [ON CONFLICT conflict-algorithm]

    Query:
    SELECT [ALL | DISTINCT] result [FROM table-list]
    [WHERE expr]
    [GROUP BY expr-list]
    [HAVING expr]
    [compound-op select]*
    [ORDER BY sort-expr-list]
    [LIMIT integer [(OFFSET|,) integer]]

    sqlite3也接受如下的数据类型:
    smallint 16 位元的整数。
    interger 32 位元的整数。
    decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
    float 32位元的实数。
    double 64位元的实数。
    char(n) n 长度的字串,n不能超过 254。
    varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。
    graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
    vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000
    date 包含了 年份、月份、日期。
    time 包含了 小时、分钟、秒。
    timestamp 包含了 年、月、日、时、分、秒、千分之一秒。

    Sqlite Datetime
    sqlite> SELECT strftime('%Y/%m/%d', '2004-10-31');
    2004/10/31
    sqlite> SELECT strftime('%Y/%m/%d', datetime());
    2012/04/05

    sqlite> SELECT strftime('%Y-%m-%d %H:%M:%S', datetime());
    2012-04-05 03:02:57

    sqlite> SELECT strftime('%Y-%m-%d %H:%M:%S day of the week:%w Week of year:%W', datetime());
    2012-04-05 03:04:52 day of the week:4 Week of year:14

    // %w Day of week, 0-6 (0 is Sunday)


    SELECT strftime('%H:%M:%S',time(), '+1 hours'); // 一个小时之后
    SELECT strftime('%Y-%m-%d %H:%M:%S',datetime(),'+1 years'); //一年之后
    SELECT strftime('%Y-%m-%d %H:%M:%S',datetime(),'+1 hours','+1 years'); // 一年之后的这一天的一小时以后
    SELECT datetime('now', 'start of month'); // 2012-04-01 00:00:00 这个月的第一天 month可以改成年
    SELECT time('12:00', 'localtime');
    SELECT time('12:00', 'utc'); ]]>
    如何把一个2G的sqlite数据库分割成小的? tag:www.v2ex.com,2012-01-11:/t/25395 2012-01-11T07:48:50Z 2012-01-13T01:19:46Z hermitu member/hermitu Base 2.0 tag:www.v2ex.com,2011-04-28:/t/12281 2011-04-28T10:41:23Z 2011-04-29T11:50:21Z Livid member/Livid http://menial.co.uk/2011/02/18/base-2-0/

    The best SQLite manager for Mac OS X. ]]>
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86