现在的位置: 首页 > 综合 > 正文

[分布式数据库设计] 统一索引服务

2013年01月30日 ⁄ 综合 ⁄ 共 1179字 ⁄ 字号 评论关闭
[分布式数据库设计] 统一索引服务

数据库中的自增量索引是非常重要的一个功能,是防治记录重复的好办法。当然,自增量索引主要是作为主键的,一些高级的数据库还会使用其作完整性验证。尽管偶见过一些人是不实用整数型的自增量索引,而是使用字符串增量,生成一个索引就要半天时间。不过既然有人这么做,还是考虑支持一下。

作为一期目标,使用的SQLite是支持自增量索引的,定义方式为"ID INTEGER PRIMARY KEY"。其他的数据库定义方式可能略有不同,(by gashero)记得MySQL好像是"AUTO_INCREMENT"。

自增量索引的主要目的是确保这个索引在表格中是唯一的,而分布式数据库中的各台chunk server是分开的,所以必须找办法防止各台chunk server中的主键重复。还好的是自增量索引的设置方式比较灵活,我们可以指定其数值。这样就可以确保进行自增量索引的统一管理。本文的实现方式是通过设置一个专用的索引服务器进程来提供统一索引服务。每次插入记录时,由接口服务器负责调用统一索引服务获得一个在当前表格内的全局唯一索引。并且在插入数据时主动设置其索引值。称为PKS(Primary Key Server)。

PKS提供的几种基本服务包括新建一个全局索引,获取一个全局索引值,更改当前索引起始点,删除一个全局索引。提供的命令列表方式如下:

CREATE PK <DatabaseName> <IDName> <TYPE>;
其中<DatabaseName>用于标志所用的索引所在数据库。<IDName>定义了一个索引的名称。由<DatabaseName>和<IDName>共同找到一个自增量索引,这两个名称并不一定要实际存在,只是用作命名空间而已。<TYPE>是索引类型,先阶段支持INT、LONG、CHAR(N)、HEXCHAR(N)。其中INT是32位无符号(by gashero)整数类型索引字段。LONG是64位无符号证书类型索引字段。CHAR(N)是适应一些使用字符串中存储数字的用户所用的字符串类型索引字段,每个字符位置存储0-9的值,可以设置字符串的长度。HEXCHAR(N)的原理同CHAR(N)只不过每个字符位置存储的不再是十进制数字,而是0-9+a-f的十六进制数字,其中a-f不区分大小写。

另一种想法:集中式索引分配。
在数据插入时并不特意指定其全局索引(by gashero),而是在chunk server上自动生成索引。这样在各个chunk server之间是可能出现相同的索引的,但是,我们在统计数据时,将指令发送到接口服务器IS(Interface Server),并且 由IS取回所有记录集时,在IS上给各个记录分配索引。这种方式简化了索引分配方式,但是不利于全局索引的生成。数据库完整性的指定也有待考虑。

统一索引服务器的实现在下一篇帖子中讨论。
 

抱歉!评论已关闭.