面向大规模批量日志数据存储方法的研究
目 录
第一章 引言.................................................................................................................... 1
1.1 选题背景和研究意义............................................................................................ 1
1.2 日志数据存储国内外研究现状............................................................................ 2
1.2.1 关系数据库 ...................................................................................................... 2
1.2.2 键值数据库简介 .............................................................................................. 5
1.2.3 具有代表性的键值数据库 .............................................................................. 7
1.2.4 键值数据库发展现状和前景 .......................................................................... 9
1.2.5 键值数据库在处理海量日志方面优势 .........................................................11
1.3 论文主要内容.......................................................................................................11
1.4 论文组织结构...................................................................................................... 12
第二章 相关理论基础.................................................................................................. 13
2.1 日志数据相关概念.............................................................................................. 13
2.1.1 日志数据概述 ................................................................................................ 13
2.1.2 日志数据格式 ................................................................................................ 14
2.2 数据库相关索引技术介绍.................................................................................. 16
2.2.1HASH 索引 ..................................................................................................... 16
2.2.2 二叉树索引 .................................................................................................... 18
2.2.3B 树索引 ......................................................................................................... 19
2.2.4B+树索引 ........................................................................................................ 20
2.3 缓存及内存映射.................................................................................................. 21
2.4 事务处理.............................................................................................................. 22
2.4.1 先写日志 ........................................................................................................ 22
2.4.2 后写日志 ........................................................................................................ 22
2.5 分布式存储介绍.................................................................................................. 22
2.6 本章小结.............................................................................................................. 23
第三章 键值数据库设计的核心技术.......................................................................... 24
3.1 多维索引技术...................................................................................................... 24
3.1.1 多维索引存储实现 ........................................................................................ 24
3.1.2 多维索引查找过程及其优化 ........................................................................ 25
3.2 数据和索引存储算法设计.................................................................................. 26
3.2.1 数据模块算法 ................................................................................................ 26
3.2.2 索引模块算法 ................................................................................................ 28
3.3 缓存设计算法....................................................................................................... 28
3.4 并发控制和 shadow page 技术........................................................................... 29
3.5 I/O 多路复用技术 ................................................................................................ 30
3.5.1Select 机制 ...................................................................................................... 30
3.5.2Epool 机制....................................................................................................... 31
3.5.3Libevent 库 ...................................................................................................... 32
3.6 本章小结............................................................................................................... 33
第四章 键值数据库系统实现...................................................................................... 34
4.1 整体规划.............................................................................................................. 34
4.1.1 系统设计目标 ................................................................................................ 34
4.1.2 系统设计结构 ................................................................................................ 34
4.1.3 系统工作流程 ................................................................................................ 35
4.2 键值数据库相关模块设计与实现...................................................................... 39
4.2.1 数据存储模块 ................................................................................................ 39
4.2.2 索引存储模块 ................................................................................................ 45
4.2.3 缓存模块 ........................................................................................................ 49
4.2.4 并发控制模块 ................................................................................................ 50
4.2.5 事务处理模块 ................................................................................................ 50
4.2.6 分布式存储模块 ............................................................................................ 51
4.3 日志数据库设计.................................................................................................. 52
4.4 日志数据库设计的缺陷...................................................................................... 54
4.5 本章小结.............................................................................................................. 54
第五章 实验情况及结果分析...................................................................................... 56
5.1 实验环境.............................................................................................................. 56
5.2 测试调用接口...................................................................................................... 56
5.3 实验设计.............................................................................................................. 57
5.3.1 实验说明 ........................................................................................................ 57
5.3.2 实验评价指标 ................................................................................................ 57
5.3.3 实验方法 ........................................................................................................ 57
5.4 数据库性能测试................................................................................................... 59
5.4.1HASH 桶数目优化测试 ................................................................................. 59
5.4.2 页大小优化测试 ............................................................................................ 60
5.4.3 数据库性能对比测量 .................................................................................... 61
5.4.4 测试总结 ........................................................................................................ 63
5.5 本章小结.............................................................................................................. 63
第六章 总结与展望...................................................................................................... 65
6.1 总结...................................................................................................................... 65
6.2 展望...................................................................................................................... 66
第一章 引言
1.1 选题背景和研究意义
随着数字信息时代的到来,利用互联网对外沟通已成为人们日常生活中不可缺少的一部分。互联网与生俱有的开放性、交互性和分散性特征,满足了人们对信息共享、开放、灵活和快速的需求[1]。因此,网络技术迅猛发展并得到广泛应用,网络规模不断扩大,新的网络协议和网络业务不断出现。据中国互联网络信息中心发布的《第24次中国互联网络发展状况统计报告》显示, 截至2009年6月30日,我国网民规模达3.38亿,而据 美国人口普查局的数据,美国人口近3.07亿,中国互联网用户在数量上已经超过美国人口[2]。
在互联网飞速发展的同时各种各样网络问题也随之出现如:各种各样的病毒,DDos攻击,网络蠕虫,流量超长等种种问题,不过他们都或多或少留下一些线索就是日志信息,我们可以通过统计和查找有关的日志,及时的发现问题并解决问题。与此同时可以对日志信息进行收集和统计,我们可以得到以访问用户的数量、规模、访问网站的规律等数据[3]。一般包括:
1. 流量:访问网站总的次数,也就是PAGE VIEW(PV);
2. 独立IP数:访问网站不重复的IP数;
3. 独立用户数:访问网站的不重复的人数此外还有用户访问入口、访问出口、最受欢迎页面、最受欢迎频道等等信息。
由上面的叙述我们了解了日志信息的巨大作用,事实上,我们并不是把所有的记录作为的日志信息存储,我们会根据应用需要,选择所有记录中的前K个记录作为日志存储,例如在某段时间以访问某个网站次数为标准来排列前1000个IP信息,并把这top-1000的记录作为日志数据存到数据库中。怎样快速存储海量的日志信息,和怎样快速的从海量的日志中找到有用的信息,怎样统计这些信息。一般我们采用的是像SQL,ORACL等传统的关系数据库来存储日志信息[7],但当我们对获取和更新日志数据的实时性要求比较高时,由于关系数据库的局限性,它在对存储数据的类型要求统一,当我们的日志信息的长度不一样,将浪费大量空间开销,也导致了在处理大规模日志信息时其在存储速率的底下,不能实时的返回查询结果而我们引入key-value存储结构数据库[9]通常是通过建\值查询,不能进行复杂的条件查询,而查询和更新的速度很大程度上由key-value存储的索引结构来决定,我们采用的索引结构分为hash,B+, 红黑树,Bloom Filter方法和hash + B+树方法,本课题将对各种索引结构在存储不同日志信息的存储效率进行对比,找到对本课题效率最高的,并实现不同的其他索引结构接口,以供扩展。
虽然目前已有一些开源的键值数据库,但它们都不适合日志数据的处理。如BerkeleyDB分布式功能不适合日志收集,NDBM和GDBM只支持等值查询,Tokyo Cabinet DB虽然支持多维索引和范围查询,但不适合处理海量日志数据,分布式模型不适合处理日志数据。因此,设计并实现一个专门处理网络数据的键值数据库具有特别的意义。
1.2 日志数据存储国内外研究现状
日志数据是由网络系统内部的运行程序产生的,记录着系统运行的状况是否正常[10]。记录下来的日志可以用来检查系统发生错误的原因,或用来查找当受到入侵时入侵者留下的线索,从而使系统能正常运行,它还可以实时地监测系统状态,了解系统运行情况、挖掘用户需要的统计信息如:网站的访问量,最受欢迎的网站,哪个地区的访问量最大等。然而,目前日志分析研究多集中在如何挖掘数据,而对如何存储海量数据研究较少。这主要是因为很多日志分析系统采用了关系数据库存储或简单的顺序存储,如商业用的大的Oracle数据库,小的免费的mysql,mysql也有商业版。采用关系数据库存在效率低下的缺点,简单的顺序存储又存在功能不够强大、查询效率不高等不足。因此日志处理缺乏一种能高效查询、适合存储海量数据的管理系统做支撑[11]。
键值数据库仅支持关系数据库操作为基本的查询和存储功能,具有模型简单和易扩展的特点,能够很好的存储海量日志数据,并能高效检索日志数据。采用键值数据库作为日志存储引擎将使日志存储和分析更快,从而构建出更加强大的日志分析工具。
下面几节将分别从主流的关系数据库和键值数据库两方面分别介绍,主要包括其特点,在存储日志数据的速率和性能。
1.2.1 关系数据库
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据。其内容主要包括:(1)关系的数据结构:单一的数据结构----关系,也就是说现实世界的实体以及实体间的各种联系均用关系来表示;数据的逻辑结构二维表,从用户的角度关系模型数据逻辑结构为一张二维表。(2)关系操作集合:查询包括选择,投影,除,并,交,差和连接;数据的更新包括插入,删除和修改。而其中的查询是最主要的部分。(3)关系完整性约束:包括实体完整性,由关系系统自动支持;参照完整性,早期的系统不支持,目前大型的系统都能自动支持;用户定义的完整性,反应应用领域要遵守的约束条件,体现了具体领域中的语义约束,用户定以后由系统支持。
目前主流的关系数据库有甲骨文的oracle,IBM的db2,微软的sqlserver,Sybase公司的sybase,(英孚美)软件公司的informix以及免费的mysql[15]等。下面简单的介绍下商用的大的功能齐全oracle数据库和免费的小的mysql数据库。
1.2.1.1Oracle 数据库
Oracle数据库是一种大型数据库系统,一般应用于商业,政府部门,它的功能很强大,能够处理大批量的数据,在网络方面也用的非常多。不过,一般的中小型企业都比较喜欢用SQL数据库系统,它的操作很简单,功能也非常齐全。只是比较oracle数据库而言,在处理大量数据方面有些不如。
Oracle数据库管理系统是一个以关系型和面向对象为中心管理数据的数据库管理软件系统,其在管理信息系统、企业数据处理、因特网及电子商务等领域有着非常广泛的应用。因其在数据安全性与数据完整性控制方面的优越性能,以及跨操作系统、跨硬件平台的数据互操作能力,使得越来越多的用户将Oracle作为其应用数据的处理系统。 Oracle数据库是基于“C/S”模式结构。客户端应用程序执行与用户进行交互的活动。其接收用户信息,并向“服务器端”发送请求。服务器系统负责管理数据信息和各种操作数据的活动。
Oracle数据库的特点包括以下几点: ORACLE7以来引入了共享SQL和多线索服务器体系结构。这减少了ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。 支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。 提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如 POWER BUILD、SQL*FORMS、VISIA BASIC 等,可以快速开发生成基于客户端PC 平台的应用程序,并具有良好的移植性。
提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。Oracle也许是最流行的服务器,占有最大的市场份额,它被广泛用于各个市场领域,满足一系列的存储需求,例如财务记录,人力资源及订单编制等,造成这种现象的原因之一在于Oracle较早的进入RDBMS(关系型数据库管理系统)领域,并且提供可运行于大多数操作系统上的数据库版本,虽然Oracle的首选操作系统似乎正由Solaris转为Linux,但是Oracle仍然在进行与其他操作系统的兼容工作,尽管Oracle经常在Unix或是Linux平台上运行,但是也有大量的Oracle在HP-UX和AIX上运行,随着几年前电子商务的激增,将会驱使Oracle成为WEB应用所需数据库的选择,这使数据库更容易受攻击者的控制。事实上,一旦Oracle从后台进入前端,那么人们会更多地关注它的安全方面。
Oracle数据库的优点包括以下几点:支持多用户,大量事务和事务处理;数据安全性和完整性的有效控制;支持分布式的数据处理;可移植性强。其缺点是太大有7到8G多,在后台运行费资源,耗内存,且速度不快。
1.2.1.2MySQL 数据库
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.对于Mysql的前途,
没有任何人抱乐观的态度.目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小
型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。总结下其特性包括以下几点
(1) 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;
(2) 支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统;
(3) 为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等;
(4) 支持多线程,充分利用CPU资源;
(5) 优化的SQL查询算法,有效地提高查询速度;
(6) 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名;
(7) 提供TCP/IP、ODBC和JDBC等多种数据库连接途径;
(8) 提供用于管理、检查、优化数据库操作的管理工具;
(9 可以处理拥有上千万条记录的大型数据库;
与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,
但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可
以大大降低总体拥有成本。
目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的
网站系统[14]。
在处理日志数据时由于其本质为关系数据库,关系数据库因为要进行类型检查、语句分析等操作大大影响了其效率,越不越不适用于处理实时和海量日志数据。
1.2.2 键值数据库简介
键值数据库是一种轻量级的数据库,引领着下一代数据库的发展方向即非关系、分布式、开源的和易扩展。它以Key→Value形式保存数据,去除关系数据库中数据完整性约束,并舍弃表的概念。KEY和VALUE可以是任意长度的二进制数据,都可看成是字符串,及处理字符串。图1-1左图说明了一种简单的键值数据库,存储记录仅是由一个键和一个值组成。如果VALUE有多个域组成,则可以存储有多个域的数据。图1-1右显示这种数据库。
键值数据库可以作为单独的服务器来运行,常见的是以嵌入式程序的方式运行,在后台运行,提供可用的接口给应用程序时,运行在宿主程序中,减少了程序之间切换,提高运行效率。键值数据库可以作为一个分布式数据库,在多台机器上实现数据共享和备份、负载均衡,形成一个具有高并发、高吞吐的数据库服务器集群。KeyValue
KeyValue
KeyValue
KeyValue
KeyValue
key Field1 value1 Field2 Value2
key Field1 value1 Field2 Value2
key Field1 value1 Field2 Value2
key Field1 value1 Field2 Value2
key Field1 value1 Field2 Valu2
图 1-1 键值数据库示例
键值数据库具有以下特点:
(1)无数据模式,键值数据库没有关系数据库中的内模式、逻辑模式、外模式等的概念,其只由Key→Value决定,是在程序内实现。
(2)复制相对简单,由于其容易支持分布式所以在网络上的数据库间能轻松地实现复制备份。
(3)接口简单,键值数据库提供简单的接口,包括基本的读 、写等接口函数用户只需要调用读写接口就可以操纵数据库。
(4)数据最终一致性,键值数据库并不一定遵循ACID特性,但能保证数据库最终是一致的。
表 1-1 键值数据库与关系数据库的不同点数据库定义
关系数据库 Key-value 数据库
数据库由表组成,表里面包含行和列,列
是由行里的元素组成,表格里的所有行有
相同的组成形式既每行包含的列数 和 列
的名称都一样。
开始的时候你可以把它想成一张表格,但它
不像一张表,你不用为它定义任何组成形
式,它就像一个水桶,你可以把要放的东西
放到里面去,事实上,水桶里的元素可以是
任意形式。
数据的组成形式是提前定义好的,它要求
输入的数据要完全和定义好的形式相匹
配。
水桶里的元素只由 key 值来决定,放进桶里
的 value 可以是任意形式。
数据的组成形式只是建立在它所包含的内
容的自然表现上,而不是面向应用。
Key-value 是面向项目的,这意味着所有与
项目有关的数据都被存储进该项目中。一个
域可以包含大量不同的项目。
规范化是关系数据库使用到的一种数据结
构模型,能保证数据一致性并消除数据冗
余。关系使数据和表联系在一起
域和域之间,还有域内的各元素没有强制的
关系
数据的存取
关系数据库 Key-value 数据库
数据的创建,更新,和删除都是由 SQL 来
完成
API 方法调用
SQL 可以通过单表或多表连接来获取数据 不支持复杂的数据库操纵
SQL 提供了聚合和复杂的过滤函数 只提供些简单的过滤 像 = != < >
方法和具体的实现是分离的 所有的应用和数据的逻辑都定义在应用的
代码里。
1.2.3 具有代表性的键值数据库
很多大型网络应用都开发了自己的键值数据库,如Sina的MemcacheDB,日本mixi网站的tokyocabinet。还有许多被广泛应用的键值数据库,如曾被作为MySQL
引擎的BerkeleyDB。下面分别予以介绍。
1.2.3.1 BerkeleyDB
BerkeleyDB是一款小巧、强壮、高效、开源的工业级数据库。其特点是高速灵活,功能强大,内核引擎高效。区别于普通数据库的复杂性,它仅由以下五个
组件组成:
(1)数据访问子系统:用来创建、更新和删除记录或数据库表等,分别提供了B+树、Hash、Queue 和Recno 四种访问方法;
(2)内存池管理子系统:对共享缓冲区进行管理,允许多个进程或者线程共享一个高速缓存;
(3)事务子系统:提供事务管理功能,具有ACID 事务属性;
(4)锁子系统:提供锁机制,获得对页或记录的读写权限,实现多个事务的并发控制。
(5)日志子系统:采用的是先写日志的策略,用于支持事务子系统进行数据恢复,保证数据一致性。
应用程序直接调用数据存取子系统和事务管理子系统, 继而调用更下层的内存管理子系统、锁子系统和日志子系统,子系统相对比较独立, 应用程序在开始的时候可以指定哪些数据管理服务将被使用。可以全部使用,也可以只用其中一部分。BerkeleyDB的HASH数据库基于普通动态HASH算法,B+数据库基于经典的B+树。支持远程复制,分布式查询,采用投票算法支持分布式,功能强大。开源的memcachedb项目就是根据其开发的内存数据库。
1.2.3.2 TokyoCabinetDB
Tokyocabinet是日本Mikio Hirabayashi开发的键值数据库,综合运用了B+树和hash这两种技术。其特点主要是存储和查询快速,性能优良,空间利用率高。它包
含HASH数据库、B+树数据库、固定长度数据库、表数据库和内存数据库,支持事务和远程复制。
TC的HASH数据库是其他数据库的基础,它采用了静态HASH的方法,采用开地址处理冲突,每个HASH桶对应一个二叉树。因此,使用TC的HASH数据库前,最好能知道插入的记录数以计算HASH桶的数目,以降低二叉树的深度。为了避免二叉树退化,TC的HASH数据库采用一种二次HASH的技术,即用两个HASH函数定位一条记录的位置。它在头部开辟了一个区域用于存储数据库文件中空闲区间,当空闲空间数超过一定数目时,HASH数据库将进行碎片整理。为尽量避免产生碎片,它对每条记录按字节对齐。显示了HASH数据库文件的结构,第一部分为文件头,记录数据库元信息,第二部分为HASH数组区,第三部分为空闲区间记录区,记录数据库文件中所有的空闲空间。记录存储在文件的剩余部分。前两部分被映射到内存中。
TC的B+树数据库建立在HASH数据库之上。B+树中每个中间节点和叶节点均进行编号,叶节点从0开始编号,中间节点从2^48+1开始编号。所有节点按“编号→叶节点或中间节点”的方式存入一个hash数据库中。每个中间节点含有固定数目的索引结构,每个索引结构形式为“key→子节点编号”。每个叶节点包含固定数目的key→value数据。TC的表数据库模拟了关系数据库的表。它将记录存储在HASH数据库中,对每个需要建立索引的域建立B+树索引。内存数据库和缓存采用了HASH数据库类似的结构。TC还能用zip/deflate等算法压缩数据,减小数据文件占用空间。
Mikio Hirabayashi还开发了基于TC的分布式数据库Tokyotyrant,支持分布式备份和查询。还支持memcached、HTTP协议和自己的二进制协议。
TC/TT在mixi的实际应用当中,存储了2000万条以上的数据,同时支撑了上万个并发连接,是一个久经考验的项目。TC在保证了极高的并发读 写性能的同时,具有可靠的数据持久化机制,同时还支持类似关系数据库表结构的hashtable以及简单的条件,分页和排序操作,是一个很棒的NoSQL 数据库。
TC的主要缺点是在数据量达到上亿级别以后,并发写数据性能会大幅度下降,NoSQL: If Only It Was That Easy提到,他们发现在TC里面插入1.6亿条2-20KB数据的时候,写入性能开始急剧下降。看来是当数据量上亿条的时候,TC性能开始大幅度下降, 从TC作者自己提供的mixi数据来看,至少上千万条数据量的时候还没有遇到这么明显的写入性能瓶颈。
1.2.4 键值数据库发展现状和前景
键值数据库起源于1979年Ken Thompson为Unix开发的基于hash存储的DBM,并得到BerkeleyDB的继承和发展。随着web应用的广泛兴起,键值数据库正显示出强大的生命力。目前,巨型搜索引擎google和百度、著名网上零售商亚马逊、国内微博服务商新浪等大型互联网服务提供者的核心存储都采用了键值数据库。键值
数据库因其强大的伸缩性、优异的查询效率和较好的空间利用率而备受云计算服务商青睐。表1-2列出了部分著名的键值数据库:
表 1-2 部分键值数据库
项目名称 开发语言 持久性存储介质 数据模型 赞助商
Cassandra Java Custom on disk Bigtable Facebook
Hypertable C++ Custom on disk Bigtable 百度 zvtens
MencacheDB C BerkleyDB blob 新浪
Ringo Erlang Custom on disk blob 诺基亚
Tokyo Tyrant C Tokyo cabinet blob Mixi.jp
云计算、电子商务、电子邮件、SNS等代表着互联网前进方向的应用,正面临海量数据的压力。键值数据库以其简单的模型,简化了大型数据管理;良好的扩展性,为分布式数据处理打下了坚实的基础;优异的查询效率,大幅提高了并发处理能力。因此,键值数据库在特殊应用,特别是大规模网络应用中将发挥不可替代的作用,具有广泛的市场前景和良好的应用价值。
1、 大规模的互联网应用。对于google,ebay这样的互联网企业,每时每刻都有无数的用户在使用它们提供的互联网服务,这些服务带来的就是大量的数据吞吐量,在同一时间,会并发的有成千上万的连接对数据库进行操作。在这种情况下,单台服务器或者几台服务器远远不能满足这些数据处理的需求,简单的升级服务 器性能这样的scale up的方式也不行,所以唯一可以采用的办法就是scale out了。scale out的方法有很多种,但大致分为两类:一类仍然采用RDBMS,然后通过对数据库的垂直和水平切割将整个数据库部署到一个集群上,这种方法的优点在于可 以采用RDBMS这种熟悉的技术[20],但缺点在于它是针对特定应用的,就是说,由于应用的不同,切割的方法是不一样的。还有一类就是google所采用的方法,抛弃RDBMS,采用key-value形式的存储,这样可以极大的增强系统的可扩 展性(scalability),如果要处理的数据持续增大,多加机器就可以了。事实上,key → value的存储就是由BigTable等相关论文的发表慢慢进入人们的视野。
2、 云存储。如果说上一个问题还有可以替代的解决方案(切割数据库)的话,那么对于云存储来说,也许key-value的store就是唯一的解决方案了。云存储简
单点说就是构建一个大型的存储平台给别人用,这也就意味着在这上面运行的应用其实是不可控的。如果其中某个客户的应用随着用户的增长而不断增长时, 云
存储供应商是没有办法通过数据库的切割来达到scale的,因为这个数据是客户的,供应商不了解这个数据自然就没法做出切割。在这种情况 下,key→value的store
就是唯一的选择了,因为这种条件下的scalability必须是自动完成的,不能有人工干预。这也是为什么几乎所有的现有的云存储都是key→value形式的,例如Amazon
的smipleDB,底层实现就是key→value,还有google的 Google AppEngine,采用的是BigTable的存储形式。
Key → value存储系统在像google,百度,亚马逊等这样的顶级网络公司的广泛应用,Key→value将在未来的数据库存储中发挥更重要的作用。
1.2.5 键值数据库在处理海量日志方面优势
关系数据库因其为支持通用完整的功能,其在日志数据要满足数据完整性,一致性而降低了效率,反而增加了处理日志数据的复杂性。由于日志数据往往是文本字符串,长度不统一,而关系数据库要求数据长度固定降低了关系数据库的空间利用率,而键值数据库不需要事先规定键和值的长度,从而能灵活处理文本数据。处理日志数据也不需要类型约束和多表联合查询,键值省掉不必要的操作,提高了数据查询的效率。同时键值数据库,可以方便灵活地构建一个分布式数据库,实现服务器客户间的复制、分布式查询,增强数据库并发访问能力。另外键值数据库可以根据应用需要再编程和日志挖掘程序结合起来,提高整个系统的性能。例如Tokyo Cabinet其数据库的读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是Berkeley DB等数据库的好几倍,如果把这种数据库应用在社交网站,监控流量等服务器上,计算一下,按每秒100万条数据,那么每天可以支持最高100w*1400*60 = 8640000w的查询总量,这样的速度对于任何一个网站都是足够用的,那在处理日志数据方面也是上上之选。
1.3 论文主要内容
本课题主要内容是设计一个日志存储系统,基本形式是非关系的采用key → value结构来实现。还要完成以下几点目标:
1、保证较高的读写效率,写日志到数据库和从数据库中读日志的速率至少都达到每秒10万条记录的数量级,能正确无误的读和写;
2、实现多维索引,实现可以从多个日志域查询相关日志记录,并支持等值查找,范围查找,遍历等操作;
3、达到线程安全,读,写进程的同步与互斥,保证数据的完整性;
4、在出现异常时,采用正确的策略,能正确的恢复日志,并记录相关出现异常的时间点,事件。
5、实现C/S分布式存储,利用libevent库来实现主存储器和从存储器间的异步通信。
本课题将采用一种从整体到局部的设计思路实现日志存储系统。首先分析日志记录的特点和日志系统需要提供的功能来总体设计键值数据库。然后研究实现数据库的各项技术并进行分析对比,接着从整体到各个模块进行分别设计和优化,最终完整地实现日志存储数据库。所要达到的目标为能实时的存储日志记录到数据库中,同时也能实时的从数据库读日志出来。
1.4 论文组织结构
第二章将对开发键值数据库的过程中用到的主要的概念和理论做一定的介绍,先从日志数据讲起,再到索引的相关理论,缓存介绍,分布式的相关理论,事务处理,线程池和异步读写用到的相关技术。
第三章将提出本论文在设计这种键值数据库过程中用到的新技术新创新来完成键值数据库设计,首先在数据块的设计多维索引实现,B+、B、Hash索引的选取,在缓存方面的设计,在分布式通信方面的创新。
第四章包括键值数据存储系统整体规划和具体模块设计,主要从以下几个模块来分别设计实现,包括数据存储模块,索引模块,缓存模块,分布式模块,并发控制模块,异常处理模块。在这几种模块中重点对缓存和索引模块,并发控制模块做详细说明介绍,由于时间和具体项目的需求对分布式模块做了简单的设计实现。
第五章将对完成的键值数据库在处理日志方面存储速度,读取速度方面实验测试,看是否达到项目的需求,并拿测试的结果和BerkeleyDB的速度做对比,提出改进和优化的地方。
第六章会总结本文贡献和尚需改进的方面及今后继续努力的方向。
浙公网安备 33010602011771号