SQLite 开发中的数据库开发规范 --如何提升业务系统性能避免基础BUG
❝开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共3300人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 +9)(1 2 3 4 5 6 7群均已爆满,开8群近400 9群 200+,开10群PolarDB专业学习群100+)
在之前已经写了不少关于SQLite的学习只是,今天继续针对开发的部分,来进行一个初步的开发规范的建立。
不熟悉的可以看之前的SQLite的文章,下面进入主题,SQLite 的开发规范,以下是根据学习和一些可能会产生
SQLite3 为什么会打败PostgreSQL 的原因分析,PostgreSQL 在移动端也是不错的选择
SQLite3 打败了 PostgreSQL 终究还是没能挽回--世界最大装机量是真的
在SQLite数据库中是有schema的这里有两个schema
main
temp
所以表必须是在这两个schema下
CREATE TABLE main.user ...
初始化数据库
基于SQLite 数据库本身的特性,请设定每个数据库本身的特性标识,如数据库断电可丢失数据,数据库断电不能丢失数据,以及数据库对应的设定的自定义applicationID等。
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL; -- 或 FULL(强一致)
PRAGMA page_size = 4096;
PRAGMA foreign_keys = OFF;
PRAGMA application_id = 0x0011AABB; -- 自定义
PRAGMA user_version = 1;
数据库名应在外部数据文件进行体现,如模块或者功能的名称后缀附以.db
建表规范
1 表名不能大小写穿插,应固定为大写或小写,我们建议小写进行表名的建立
2 表名中不要有其他的符号,如下划线,中划线等避免引起歧义
3 在创建表时必须带有strict 表类型,针对带有金额数字的表必须使用strict表类型
4 建表时,应考虑数据提取和数据写入的倾向性,部分情况严禁按照三范式进行数据库表设计,如高并发写入则必须依照最短写入数据原理,一次操作可以尽可能的写入必要的数据到单表中。
5 数据库中的数据表个数多,将导致每次执行SQL速度缓慢,所有表将绑定在元数据中,每次执行任意SQL都会进行schema信息的读取,建议单库表不超过100个
6 单表存储的数据行数建议控制在100万行以内,同时频繁的查询必须建立有效的索引来进行支持。
7 索引建立应有效,严禁多个单个字段频繁建立索引,降低数据处理速度。
CREATE INDEX idx_order_user_status
ON order(user_id, status);
8 业务期间严谨,进行ddl操作,DDL操作将阻止对数据库其他的任何操作,直到DDL结束。
9 不同业务模块的表应建立在不同的库文件下,而不应建立在一个库文件中。
10 主键应遵循短小精悍的策略,不应使用联合主键
11 数据库严禁使用trigger 和 外键等阻碍数据表写操作的原子性的集合。
12 主键建立不允许使用TEXT或GUID等类型,避免WAL写放大,提高B-tree插入性能,建议使用int的方式来进行。因为在SQLite real 计算是有误差的,所以在数据存储和计算中,尤其针对金额等,我们建议使用int 来表示不同的小数点前和小数点后数值。
13 时间字段,时间字段在SQLite是没有相关字段类型的,我们建议使用int来代表时间,通过秒来记录如unix时间戳类型。
CREATE TABLE main.order (
id INTEGER PRIMARY KEY, -- 自增ID
user_id INTEGER NOT NULL, -- 用户ID
amount INTEGER NOT NULL, -- 金额(单位:分)
status INTEGER NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL, -- UNIX时间戳
updated_at INTEGER NOT NULL
) STRICT;
14 BLOB 字段不要存储超大的文件,如声音,图像等这些都不应该在SQLite数据库中继续存储。
15 关键的业务字段,索引字段不要为NULL,必须有默认值
16 单表的字段数量避免太多,控制在50列以内,避免B-TREE的页面太大导致更多层级的B-TREE页面的存在,导致读和写性能下降。
17 数据库表保留名,建表中,不能有sqlite,main ,temp, temporay等敏感字的出现。
18 操作中事务的设置,尽量避免 读写在一个事务内,尽量分开处理。
一些工程化设计建议基于SQLite
和架构师沟通那种“一坨”的系统,推荐只能是OceanBase,Why ?
OceanBase Hybrid search 能力测试,平换MySQL的好选择
写了3750万字的我,在2000字的OB白皮书上了一课--记 《OceanBase 社区版在泛互场景的应用案例研究
OceanBase 6大学习法--OBCA视频学习总结第六章
OceanBase 6大学习法--OBCA视频学习总结第五章--索引与表设计
OceanBase 6大学习法--OBCA视频学习总结第五章--开发与库表设计
OceanBase 6大学习法--OBCA视频学习总结第四章 --数据库安装
OceanBase 6大学习法--OBCA视频学习总结第三章--数据库引擎
OceanBase 架构学习--OB上手视频学习总结第二章 (OBCA)
OceanBase 6大学习法--OB上手视频学习总结第一章
没有谁是垮掉的一代--记 第四届 OceanBase 数据库大赛
跟我学OceanBase4.0 --阅读白皮书 (OB分布式优化哪里了提高了速度)
跟我学OceanBase4.0 --阅读白皮书 (4.0优化的核心点是什么)
跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)
跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)
OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
“合体吧兄弟们!”——从浪浪山小妖怪看OceanBase国产芯片优化《OceanBase “重如尘埃”之歌》
MongoDB “升级项目” 大型连续剧(3)-- 自动校对代码与注意事项
MongoDB “升级项目” 大型连续剧(2)-- 到底谁是"der"
MongoDB “升级项目” 大型连续剧(1)-- 可“生”可不升
MongoDB 大俗大雅,上来问分片真三俗 -- 4 分什么分
MongoDB 大俗大雅,高端知识讲“庸俗” --3 奇葩数据更新方法
MongoDB 大俗大雅,高端的知识讲“通俗” -- 2 嵌套和引用
MongoDB 大俗大雅,高端的知识讲“低俗” -- 1 什么叫多模
MongoDB 合作考试报销活动 贴附属,MongoDB基础知识速通
MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB 麻烦专业点,不懂可以问,别这么用行吗 ! --TTL
免费PolarDB云原生课程,听课“争”礼品,重塑云上知识,提高专业能力
非“厂商广告”的PolarDB课程:用户共创的新式学习范本--7位同学获奖PolarDB学习之星
“当复杂的SQL不再需要特别的优化”,邪修研究PolarDB for PG 列式索引加速复杂SQL运行
“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!
POLARDB 添加字段 “卡” 住---这锅Polar不背
PolarDB 版本差异分析--外人不知道的秘密(谁是绵羊,谁是怪兽)
PolarDB 答题拿-- 飞刀总的书、同款卫衣、T恤,来自杭州的Package(活动结束了)
PolarDB for MySQL 三大核心之一POLARFS 今天扒开它--- 嘛是火
PostgreSQL 新版本就一定好--由培训现象让我做的实验
说我PG Freezing Boom 讲的一般的那个同学,专帖给你,看看这次可满意
PostgreSQL 无服务 Neon and Aurora 新技术下的新经济模式 (翻译)
“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!
全世界都在“搞” PostgreSQL ,从Oracle 得到一个“馊主意”开始
PostgreSQL 加索引系统OOM 怨我了--- 不怨你怨谁
PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
PostgreSQL 分组查询可以不进行全表扫描吗?速度提高上千倍?
POSTGRESQL --Austindatabaes 历年文章整理
PostgreSQL 查询语句开发写不好是必然,不是PG的锅
这个 PostgreSQL 让我有资本找老板要 鸡腿 鸭腿 !!
MySQL相关文章
一篇为MySQL用户,分析版本核心差异的文章--8.028-8.4的差异
那个MySQL大事务比你稳定,主从延迟低,为什么? Look my eyes! 因为宋利兵宋老师