嵌入式数据库 - SQLite

SQLite,是一个遵守ACID的关联式资料库管理系统(Relational Database Management System, RDBMS),它的全部就是一个C file,被整合在使用者程式中。

目录

History (历史)

License? Public domain software (公共领域軟件)

An Embedded Database (嵌入式数据库)

1. SQLite is a C-language library, One file of ANSI-C (SQLite 是一个 C 语言库,一个 ANSI-C 文件)

2. Based on PostgreSQL 6.5 syntax and semantics (基于 PostgreSQL 6.5 语法和语义)

3. Architecture (架構)

Application of SQLite (SQLite 的应用)


History (历史)

SQLite诞生于2000年,当时它的作者 D. Richard Hipp 在 General Dynamics工作,为美国海军开发用于导弹驱逐舰的软件。最初他们使用的数据库是HP-UX和IBM Informix,对于非专业的程序員来说,熟悉设定和使用Informix就需要很多时间,Hipp 就想说能不能有一个self-contained 的Database,易于使用,并且可以随程序一起移动并在任何地方运行,系统上也不需要安装其他软件或是设定?

之后,只要有空闲时间Hipp就持续开发SQLite,并且在2000年8月发布了初版,它和其他RDBMS最大的概念上差别是, 大部分的RDBMS(MySQL, PostgreSQL)都是Server-Client,但是SQLite是Server-less,是直接对档案做操作

从上图可以看出来,如果使用SQLite就不需要担心RDBMS崩溃的问题,也可以同时多个应用(App)读写同一Database(Single Disk File),冲突和读写由OS来处理

License? Public domain software (公共领域軟件)

对于很多自由软件(free software)来说,都会根据它的licenses来决定是否可否商业化,是否使用了要公开,但是对于SQLite,并不需要担心这个,因为 SQLite是一个Public domain software(公共领域軟件),什么是Public domain呢?就是不具有版权的作品

The public domain consists of all the creative work to which no exclusive intellectual property rights apply. Those rights may have expired, been forfeited, expressly waived, or may be inapplicable.

(公共领域包括所有不适用专有知识产权的创造性作品。这些权利可能已过期、被没收、明确放弃或可能不适用。)

底下是SQLite的LICENSE.md 内容,里面描述了Hipp已经放弃了SQLite的版权,所以它已经属于Public domain

The author disclaims copyright to this source code. In place of a legal notice, here is a blessing: (作者否认此源代码的版权。 代替法律声明,这里有一个祝福:) 

May you do good and not evil. (愿你行善不作恶)

May you find forgiveness for yourself and forgive others. (愿你为自己找到宽恕,也宽恕他人)

May you share freely, never taking more than you give. (愿你自由分享,从不索取多于给予)

除了Hipp放弃了版权,任何贡献代码的人也都必须放弃他们的版权,签署版权免责声明

顺便分享在 Size isn't everything for the modest creator of SQLite | Technology | The Guardian 这篇关于Hipp的采访中的一段话

"It's very clear to me that if I'd had any business sense whatsoever I could have made a lot of money, but I don't," he says. "I like to tell people that we make enough to live fine in Charlotte, North Carolina. We don't make nearly enough money to live in London or San Francisco, but we don't live there so that's OK," he adds - with a touch, just a touch, of wistfulness.

(“我很清楚,如果我有任何商业意识,我本可以赚很多钱,但我没有,”他说。 “我喜欢告诉人们,我们赚的钱足以在北卡罗来纳州夏洛特过上好日子。我们赚的钱还不够住在伦敦或旧金山,但我们不住在那里,所以没关系,”他补充道 - 淡淡的,只是淡淡的,怀念。 )

那篇文章给的副标就是:SQLite被IT界的一些大厂使用-但他没有从中赚到一分钱

An Embedded Database (嵌入式数据库)

Think of SQLite not as a replacement for Oracle but as a replacement for fopen()

(SQLite 不是 Oracle 的替代品,而是 fopen() 的替代品) 

1. SQLite is a C-language library, One file of ANSI-C (SQLite 是一个 C 语言库,一个 ANSI-C 文件)

SQLite是一个C-language library,只要include,就能透过function call 来操作database了,常用的function如下

所以SQLite 它不是作为一个独立的进程独立运行,而是在它所服务的程序内运行。 C语言如何使用这个库可以参考SQLite with C-language Interface,如果是其他语言的话可以透过一些既有的wrapper就能使用了 

2. Based on PostgreSQL 6.5 syntax and semantics (基于 PostgreSQL 6.5 语法和语义)

当我们使用 sqlite3_exec() 去对DB做操作,里面带入的SQL语句(例如 SELECT * FROM table)是基于PostgreSQL 6.5的 

int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */ 
); 

但SQLite的syntax and semantics和PostgreSQL还是有差别的,最大差别是它不检查非主键的property type

那为什么是选择基于 PostgreSQL呢?因为当时 Hipp对市面上的很多RDBMS做了测试,他发现PostgreSQL总是可以回传正确的资料且不会崩溃,所以SQLite很多想法(文件,规范,或是测试)都基于PostgreSQL,他们相信PostgreSQL做出的决定,直到现在WWPD (What Would Postgres Do)仍然是 SQLite 开发团队的口头禅。

3. Architecture (架構)

SQLite 是一个模块化架构,称为"The SQLite Stack",来管理Database,如果对内容有兴趣的话,可以看D. Richard Hipp - SQLite [The Databaseology Lectures - CMU Fall 2015] - YouTube 这个影片,介绍得很仔细,大致的架构如下(喔 当然最后他们都在一个C file里面)

Application of SQLite (SQLite 的应用)

官方提供的 Command Line Shell For SQLite 和 SQLite Archive Files 都是应用范例,至于其他的可以参考 SQLite: Protégé of PostgreSQL - YouTube 影片中的介绍 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
gpay-sqlite-fix是指修复GPay应用中与SQLite数据库相关的问题。SQLite是一种轻量级的关系型数据库引擎,常被用于移动应用程序和嵌入系统中。GPay应用中可能存在一些与SQLite数据库操作相关的BUG或错误,需要进行修复以保证应用的稳定性和正常运行。 修复gpay-sqlite-fix主要包括以下几个步骤: 1. 问题定位:首先,开发人员需要通过分析用户的反馈或应用的错误报告来确定具体的问题所在。可能的问题包括数据丢失、异常退出、性能问题等。 2. 找出根本原因:开发人员需要仔细检查代码,查找潜在的缺陷或逻辑错误。这可能涉及到检查SQL查询语句的正确性、数据插入、更新和删除的一致性、事务的处理等。 3. 修复问题:一旦问题被定位并找到了根本原因,开发人员将针对具体问题进行代码修复。这可能包括更正查询语句、修复SQL语句中的错误、修复数据插入/更新/删除逻辑等。 4. 单元测试:修复完成后,开发人员需要进行单元测试以确保修复的代码不会引入新的问题。单元测试可以验证修复后的代码是否能够正常执行预期操作,并检查应用的数据一致性。 5. 重复测试:修复在单元测试中通过后,需要对整个应用进行全面测试。这将确保修复的问题不会对其他功能产生负面影响,并且应用在各种不同场景下的表现都正常。 总而言之,gpay-sqlite-fix是指修复GPay应用中与SQLite数据库相关的问题。通过定位问题、找出根本原因、修复代码、进行单元测试和全面测试,可以确保GPay应用在使用SQLite数据库时的稳定性和正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值