在 share nothing 的架构中,如果数据规模很大,为了提高可用性,通常采用数据库分片(database sharding)的策略。常见的分片策略是按主键把数据分散到不同的数据库中。在使用常规的 RDBMS 的场景中,分片策略中使用的数据库个数通常在100以下。在某些特殊的场景中,可能希望采用更极端的分片方法,比如在类似地址本这种应用中,可以为每个用户创建一个数据库。
SPHiveDB 就是为这种极端的分片方法而实现的一个数据库服务器。SPHiveDB 基于 sqlite ,用 JSONRPC over HTTP 为 sqlite 提供了网络访问接口。为了能够支持大量的数据库实例,SPHiveDB 把多个 sqlite 数据库合并保存到一个文件中;支持同时使用多个数据库文件。
http://code.google.com/p/sphivedb/
http://freshmeat.net/urls/01b9b3be9ec4e19ebd6a8e6208f3a0a1
http://sphivedb.googlecode.com/files/spmemvfs-0.2.src.tar.gz
×× 内部结构示意图
SPHiveDB 使用 Tokyo Cabinet 作为最终的物理存储,每个用户对应的 sqlite 数据库以用户名为 key 保存在 Cabinet 中。为了支持能够从 Cabinet 中加载 sqlite 数据库,为 sqlite 实现了一个 memvfs 。通过 memvfs ,使得 sqlite 能够在内存中加载和保存数据。SPHiveDB 支持一个进程同时使用多个 Cabinet 文件,使得单一 server 能够支持尽可能大的存储空间。
×× JSONRPC 请求和响应示例
{
"method" : "execute",
"params" : [
{
"dbfile" : 0,
"user" : "foobar",
"dbname" : "addrbook",
"sql" : [
"insert into addrbook values ( 1, \"foo@bar.com\" )",
"select * from addrbook"
]
}
],
"id" : "foobar"
}
dbfile 指定操作哪一个 Cabinet 文件;user + dbname 指定操作哪一块数据;sql 需要执行的 sql 语句,支持批量执行多个 sql 语句,使用 all-or-nothing 的策略,要么全部成功,要么全部失败。dbname 还用于指明第一次操作一块数据时,用什么语句来创建 sqlite 数据库。用于创建 sqlite 数据库的语句保存在 sphivedbsvr.ini 配置文件中。以 ddl. 开头的配置节用于指定对应数据库的创建语句。
[ddl.addrbook]
create table if not exists addrbook ( id int, addr varchar(64) );
{
"result" : [
{
"name" : [ "affected", "last_insert_rowid" ],
"type" : [ "int", "int" ],
"row" : [ [ 1, 1 ] ]
},
{
"name" : [ "id", "addr" ]
"type" : [ "int", "varchar(64)" ],
"row" : [ [ "1", "foo@bar.com" ] ],
}
],
"id" : "foobar"
}
result 返回 sql 语句执行的结果,name 对应的 array 为 column 的名字,type 对应的 array 为 column 的类型,row 对应的 array 是返回 recordset 。特别地,对于 INSERT/UPDATE/DELETE 也使用类似 select 的方式来返回,affected 是 sql 语句执行之后 sqlite3_changes 返回的值,last_insert_rowid 是 sql 语句执行之后 sqlite3_last_insert_rowid 返回的值。

- 大小: 2.6 KB
分享到:
相关推荐
项目:基于Sqlite数据库的asp.net三层架构示例 开发:walkingp 时间:2010-4-4 主页:http://www.51obj.cn/ 说明:本来是要做权限管理系统的,但时间太短,就打了一个架构。希望多多包涵。:)
基于Android Studio的记事本备忘录系统源码:支持SQLite本地数据库、登陆注册及更多功能,Android Studio源码记事本:SQLite本地数据库,登录注册及基本操作,附APK与演示视频,Android studio源码,记事本,可做备忘...
Android studio软件开发:基于SQLite数据库编写的学生管理系统源码,学生信息的增删改查和list view列表显示数据库内容,内附含sharepreference数据库编写的基础注册页面。
SPHiveDB 是一个 SQLite 数据库服务器。 它使用 JSON-RPC over HTTP 公开网络接口以使用 SQLite 数据库。 它支持通过东京内阁将多个 SQLite 数据库合并到一个文件中。 它还支持使用多个文件。 它专为极端分片模式而...
基于sqlite数据库实现的机票管理系统源码+项目说明.zip基于sqlite数据库实现的机票管理系统源码+项目说明.zip基于sqlite数据库实现的机票管理系统源码+项目说明.zip基于sqlite数据库实现的机票管理系统源码+项目说明...
基于sqlite数据库以及深度学习lstm实现的检索式聊天机器人python源码+数据集+模型+代码注释.zip基于sqlite数据库以及深度学习lstm实现的检索式聊天机器人python源码+数据集+模型+代码注释.zip基于sqlite数据库以及...
SQLite数据库操作,供大家一起共同分享学习。
3. SQLite的特点:由于SQLite是嵌入式数据库,它不使用传统的客户端-服务器架构,而是通过一个单独的库文件实现数据库的所有功能,非常适合小型项目或者作为应用程序的一部分集成。它支持大部分SQL92标准,能够处理...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计...基于sqlite数据库以及深度学习lstm实现的检索式聊天机器人python源码+详细注释+数据集.zip
这是基于android开发的学生信息管理系统,包括学生的增加、...除此之外,该系统应用到了手机内置的sqlite数据库来进行数据的存储,所以,是学生学习android的一次不错的选择,应用工具androidStudio,编写语言,java
基于sqlite数据库以及深度学习lstm实现的检索式聊天机器人python源码+数据集+模型.zip 个人经导师指导并认可通过的高分毕业设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的...
基于QT+sqlite数据库实现员工信息管理系统源码+项目说明.zip基于QT+sqlite数据库实现员工信息管理系统源码+项目说明.zip基于QT+sqlite数据库实现员工信息管理系统源码+项目说明.zip基于QT+sqlite数据库实现员工信息...
SQLite是一款轻量级、自包含的数据库引擎,广泛应用于嵌入式系统和移动应用,因其高效性和无需服务器进程的特点而受到青睐。这款Delphi工具则提供了更加便捷的方式来操作SQLite数据库,尤其对于那些使用Delphi进行...
Android :SQLite3数据库的简单应用,实现数据增删改查App
SQLite数据库是一种轻量级、开源的嵌入式关系数据库,广泛应用于移动应用、小型桌面应用以及需要快速存储和检索数据的任何系统。SQLiteBrowser是一款免费且开源的图形用户界面工具,用于浏览、编辑和管理SQLite...
基于SQLite数据库和Entity Framework OR/M实现ASP.NET Identity成员资格 基础信息 这是 ASP.NET Identity 成员身份与实体框架和 SQLite 数据库的实现。 出于我的目的,没有必要的多角色策略(一个用户可以拥有 1 个...
基于SQLite数据库的学生管理系统(2.0).zip 基于SQLite数据库的学生管理系统(2.0).zip 基于SQLite数据库的学生管理系统(2.0).zip 基于SQLite数据库的学生管理系统(2.0).zip 基于SQLite数据库的学生管理系统...
基于SQLite数据库的课程表,使用Androidstudio2.2.2编写。课程数据以 SQLite数据库进行存储,实现增删改查数据库数据。可动态添加课程、删除、更改课程。 详细描述见 ...
SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它不需要单独的服务器进程,可以直接嵌入到各类应用程序中。SQLite具有高度移植性,支持多种操作系统和编程语言,如Windows、Linux、Mac OS、Java、C++、...
SQLite数据库工具为用户提供了一个方便的界面,用于管理和操作SQLite数据库,使得无需深入了解底层数据库管理系统的复杂性,也能进行数据的增删改查和数据库结构的维护。 标题"sqlite数据库工具"所涉及的知识点主要...