`
titan
  • 浏览: 113707 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

常用内存数据库介绍(二)

阅读更多

(部分资料直接来源于Internet)

4.  常用内存数据库

4.1           SQLite

SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。特性包括:

  • 事务操作是原子,一致,孤立,并且持久的(ACID),即使在系统崩溃和电源故障之后。
  • 零配置——不需要安装和管理。
  • 实现了绝大多数SQL92标准。
  • 整个数据库存储在一个单一的文件中。
  • 数据库文件可以在不同字节序的机器之间自由地共享。
  • 支持最大可达2T的数据库。 (241 字节)
  • 字符串和BLOB类型的大小最大可达 2G 字节(231字节)
  • 小的代码: 完整配置的少于250KB,忽略一些可选特性的少于150KB
  • 在大多数常见操作上比流行的客户/服务器数据库引擎更快
  • 简单,易于使用的API
  • 内建TCL绑定 另外提供可用于许多其他语言的绑定。
  • 具有良好注释的源代码,95%经过测试。
  • 独立:没有外部依赖。
  • 源代码位于公共域 可用于任何用途。

SQLite发行版包含一个独立的命令行访问程序(sqlite),可用于管理SQLite数据库,并适合作为一个如何使用SQLite库的例子。

 

License:      SQLite使用Public domain授权(注),对于个人使用和商业使用都是免费的。

 

技术上的优点和特性
SQLite是一个轻量级、跨平台的关系型数据库。


轻量级

先说它的第一个特色:轻量级。想必SQLite的作者很看重这个特性,连它的Logo都是用的羽毛,来显摆它的轻飘飘。SQLiteC/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows487KBLinux347KB

 

     绿色软件

SQLite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要安装。所以在部署的时候能够省去不少麻烦。

单一文件

所谓的单一文件,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。

★技术上的缺点和不足

并发访问的锁机制
SQLite
在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。

SQL
标准支持不全
在它的官方网站上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束。

网络文件系统(以下简称NFS
有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug

★编程语言接口
SQLite
支持很多种语言的编程接口。这对于我这种喜欢混用多种编程语言的人来说,是很爽的。下面我大概介绍一下。

C/C++
由于SQLite本身是C写的,它自带的API也是C接口的。所以C/C++用起来最直接了。假如你不喜欢面向过程的C API风格,可以另外找个C++的包装库。想重新发明轮子的同学,也可以自己包装一个。

Java
如果要用Java访问SQLite,可以通过SQLiteJDBC驱动,或者通过专门的SQLite包装库。我个人建议走JDBC方式,万一将来要换数据库,代码就不用大改。

Python
pysqlite
Python操作SQLite的首选。从Python 2.5开始,它已经被整合到Python的标准库中。看来Python社区还是蛮喜欢SQLite嘛。
.Net
对于喜欢.Net的同学,可以通过SQLiteADO.NET驱动来访问。

Ruby
Ruby
可以通过SQLite-Ruby操作SQLite数据库,不过我没用过。

Perl
CPAN上有DBD::SQLite,不过我也没用过。


★一些非技术的参考因素

需要根据如何选择开源项目里面提到的几个参考因素,再评估一下。
授权协议(License
SQLite
使用的是Public Domain协议,这是最爽一种,可以放心大胆地用。
用户的普及程度
最近这几年,使用SQLite的人越来越多。包括一些大公司也开始把它整合到产品中(比如GoogleGearsAppleSafariAdobeAIR)。
开发的活跃程度
如果到SQLiteChange Log上大致了解一下,可以看出最近5年基本上每1-2个月都会有更新。说明开发的活跃度还是非常高的。

 

SQLite不同于其他大部分的SQL数据库引擎,因为它的首要设计目标就是简单化:

  • 易于管理
  • 易于使用
  • 易于嵌入其他大型程序
  • 易于维护和配置

许多人喜欢SQLite因为它的小巧和快速. 但是这些特性只是它的部分优点, 使用者还会发现SQLite是非常稳定的. 出色的稳定性源于它的简单, 越简单就越不容易出错. 除了上述的简单、小巧和稳定性外, 最重要的在于SQLite力争做到简单化.

简单化在一个数据库引擎中可以说是一个优点, 但也可能是个缺点, 主要决定于你想要做什么. 为了达到简单化, SQLite省略了一些人们认为比较有用的特性, 例如高并发性、 严格的存取控制、丰富的内置功能、 存储过程、复杂的SQL语言特性、 XML以及Java的扩展, 超大的万亿级别的数据测量等等. 如果你需要使用上述的这些特性并且不介意它们的复杂性, 那么SQLite也许就不适合你了. SQLite没有打算作为一个企业级的数据库引擎, 也并不打算和Oracle或者PostgreSQL竞争.

仅凭经验来说SQLite适用于以下场合: 当你更看中简单的管理、使用和维护数据库, 而不是那些企业级数据库提供的不计其数的复杂功能的时候,使用SQLite是一个比较明智的选择. 事实也证明, 人们在许多情况下已经清楚的认识到简单就是最好的选择.

4.1.1   SQLite最佳试用场合

·         网站

作为数据库引擎SQLite适用于中小规模流量的网站(也就是说, 99.9%的网站). SQLite可以处理多少网站流量在于网站的数据库有多大的压力. 通常来说, 如果一个网站的点击率少于100000/天的话, SQLite是可以正常运行的. 100000/天是一个保守的估计, 不是一个准确的上限. 事实证明, 即使是10倍的上述流量的情况下SQLite依然可以正常运行.

·         嵌入式设备和应用软件

因为SQLite数据库几乎不需要管理, 因此对于那些无人值守运行或无人工技术支持的设备或服务, SQLite是一个很好的选择. SQLite能很好的适用于手机, PDA, 机顶盒, 以及其他仪器. 作为一个嵌入式数据库它也能够很好的应用于客户端程序.

·         应用程序文件格式

SQLite作为桌面应用程序的本地磁盘文件格式取得了巨大成功.例如金融分析工具、CAD 包、档案管理程序等等. 一般的数据库打开操作需要调用sqlite3_open()函数,并且标记一个显式本地事务的起始点(BEGIN TRANSACTION)来保证以独占的方式得到文件的内容. 文件保存将执行一个提交(COMMIT)同时标记另一个显式本地事务起始点. 这种事务处理的作用就是保证对于应用程序数据文件的更新是原子的、持久的、独立的和一致的.

数据库里可以加入一些临时的触发器,用来把所有的改变记录在一张临时的取消/重做日志表中. 当用户按下取消/重做按钮的时候这些改变将可以被回滚. 应用这项技术实现一个无限级的取消/重做功能只需要编写很少的代码.

·         替代某些特别的文件格式

许多程序使用fopen(), fread(), fwrite()函数创建和管理一些自定义的文件用来保存数据. 使用SQLite替代这些自定义的文件格式将是一种很好的选择.

·         内部的或临时的数据库

对于那些有大量的数据需要用不同的方式筛选分类的程序, 相对于编写同样功能的代码, 如果你把数据读入一个内存中的SQLite数据库, 然后使用连接查询和ORDER BY子句按一定的顺序和排列提取需要的数据, 通常会更简单和快速. 按照上述的方法使用内嵌的SQLite数据库将会使程序更富有灵活性, 因为添加新的列或索引不用重写任何查询语句.

·         命令行数据集分析工具

有经验的SQL用户可以使用SQLite命令行程序去分析各种混杂的数据集. 原是数据可以从CSV(逗号分隔值文件)文件中导入, 然后被切分产生无数的综合数据报告. 可能得用法包括网站日志分析, 运动统计分析, 编辑规划标准, 分析试验结果.

当然你也可以用企业级的客户端/服务器数据库来做同样的事情. 在这种情况下使用SQLite的好处是: SQLite的部署更为简单并且结果数据库是一个单独的文件, 你可以把它存储在软盘或者优盘或者直接通过email发给同事.

·         Demo或测试版的时候作为企业级数据库的替代品

如果你正在编写一个使用企业级数据库引擎的客户端程序, 使用一个允许你连接不同SQL数据库引擎的通用型数据库后台将是很有意义的. 其更大的意义在于将SQLite数据库引擎静态的连接到客户端程序当中,从而内嵌SQLite作为混合的数据库支持. 这样客户端程序就可以使用SQLite数据库文件做独立的测试或者验证.

·         数据库教学

因为SQLite的安装和使用非常的简单(安装过程几乎忽略不计, 只需要拷贝SQLite源代码或sqlite.exe可执行文件到目标主机, 然后直接运行就可以) 所以它非常适合用来讲解SQL语句. 同学们可以非常简单的创建他们喜欢的数据库, 然后通过电子邮件发给老师批注或打分. 对于那些感兴趣怎样实现一个关系型数据库管理系统(RDBMS)的高层次的学生, 按照模块化设计且拥有很好的注释和文档的SQLite源代码, 将为他们打下良好的基础. 这并不是说SQLite就是如何实现其他数据库引擎的精确模型, 但是很适合学生们了解SQLite是如何快速工作的, 从而掌握其他数据库系统的设计实现原则.

·         试验SQL语言的扩展

SQLite简单且模块化的设计使得它可以成为一个用来测试数据库语言特性或新想法的优秀的原型平台.

 

分享到:
评论
1 楼 kxyk 2011-04-02  
sqlite也是内存库的一种么?

相关推荐

    常用内存数据库介绍常用内存数据库介绍.doc

    内存数据库简介 内存数据库是一种将整个数据库存储在计算机的主存中,以提高数据库的性能和响应速度的技术。传统的数据库管理系统将所有数据存储在磁盘上,称为磁盘数据库(DRDB:Disk-Resident Database)。磁盘...

    常用内存数据库介绍

    下面,我们将深入探讨几种常用的内存数据库,包括它们的特点、应用场景以及为何它们能够在现代数据处理环境中占据一席之地。 ### 1. **Redis** Redis(Remote Dictionary Server)是最受欢迎的内存数据库之一,它...

    常用内存数据库的比较

    常用内存数据库的比较 内存数据库是一种新型的数据库管理系统,它将整个数据库放入内存中,以提高数据库的性能和响应速度。与传统的磁盘数据库相比,内存数据库具有很多优势,如快速的数据访问速度、低延迟、低成本...

    常用内存数据库介绍.pdf

    常用内存数据库介绍.pdf

    常用内存数据库比较

    内存数据库是一种将数据存储在内存中的数据库系统,其主要特点是高速读写性能,适用于需要快速响应和处理大量数据的应用场景。在JAVA开发中,有很多开源的内存数据库可以选择,本篇文章将对比分析这些数据库的特点、...

    内存数据库

    实现词法分析和语法分析的内存小容量数据库,主要用于学习编译原理

    内存数据库 实时交易系统的催化剂

    内存数据库是现代信息技术领域中的一个重要概念,特别是在实时交易系统中,它扮演着催化剂的角色,显著提高了数据处理的速度和效率。本文将深入探讨内存数据库的基本原理、优势、应用场景以及与实时交易系统的结合。...

    linux下内存数据库

    哈希表是内存数据库中常用的一种数据结构,它在Linux环境下扮演着关键角色。 哈希表,又称散列表,是通过哈希函数将数据映射到一个固定大小的数组中。这个函数能够将任意长度的输入(如字符串)转化为固定长度的...

    sorted_base.zip_内存数据_内存数据库_实时内存数据

    描述提到的“排序的列表的基类一种实时内存数据库组织与管理方法”,意味着文件内容可能涉及一种特定的数据结构——排序列表,这是内存数据库中常用的数据组织方式,用于快速查找、插入和删除数据。排序列表通常基于...

    内存数据库PPT教案学习.pptx

    1. 数据映射:内存数据库会将常用数据表全部映射到主机共享内存中,同时为关键字段建立内存索引,以加速查询。 2. API接口:应用程序通过调用特定的内存数据库API,直接访问内存中的数据,而不是直接操作物理数据库...

    简易内存数据库(一)总述

    此外,对于源码和工具部分,文章可能还涵盖了开源内存数据库如Redis、Memcached等的简要分析,或者介绍了如何构建一个简单的内存数据库系统,包括数据结构的选择(如哈希表、B树等)和API设计等。 在本科班课程项目...

    oracle常用的数据库脚本

    - `ALTER SYSTEM`:调整数据库系统的参数,例如修改内存分配、日志文件位置等。 - `STARTUP/SHUTDOWN`:启动或关闭数据库实例。 2. **用户管理**: - `CREATE USER`:创建新的数据库用户。 - `GRANT/REVOKE`:...

    用于内存数据库的Hash索引的设计与实现

    Hash索引是数据库系统中一种常用的索引技术,尤其适合于内存数据库。它利用哈希函数将数据的键(key)转化为内存地址,使得数据的查找、插入和删除操作能在常数时间内完成,极大地提高了数据访问效率。Hash索引的...

    高性能内存数据库Redis(基础篇)

    作为一个内存数据库,它的主要特点是数据存取速度快,支持多种数据结构,且提供了丰富的持久化策略。在Java开发中,Redis的使用非常常见,能够显著提升应用程序的响应速度和整体性能。 1. 数据结构: Redis支持...

    内存数据库h2.jar

    IT资料 常用软件 内存数据库 jar包

    vc实现Sqlite数据库(加密DB、内存DB、临时DB)

    在VC++中,你可以通过传递`:memory:`作为数据库路径来创建内存数据库。CSqlite类可能提供一个`OpenInMemoryDatabase()`方法,调用此方法将创建一个只存在于内存中的数据库实例。 3. **临时数据库**: 临时数据库...

    数据库维护常用SQL

    下面我们将介绍一些常用的数据库维护 SQL 语句。 一、查询 SQL 的资源消耗情况 在数据库中,SQL 语句的执行会消耗一定的资源,包括 CPU、内存、I/O 等。为了了解 SQL 语句的资源消耗情况,我们可以使用以下 SQL ...

    内存数据库在互联网余票查询中的应用.pdf

    【内存数据库在互联网余票查询中的应用】 随着互联网售票系统的普及,越来越多的旅客选择在线购票,这使得系统在高峰期承受巨大的并发请求压力。其中,余票查询作为关键功能,其性能直接影响用户体验。传统的磁盘...

    \"支持高性能模糊检索的内存数据库EMS\"分享总结

    【高性能模糊检索的内存数据库EMS】是一个专注于提供高效模糊查询能力的内存数据库系统。它针对大规模数据集,尤其是在需要快速响应复杂查询需求的场景下,展现出优越的性能。内存数据库因其将数据存储在内存中,...

Global site tag (gtag.js) - Google Analytics