`
hanxuebo
  • 浏览: 17607 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

盘点这些年使用过的数据库

阅读更多
对数据库技术还是十分感兴趣的,盘点一下这些年使用过的数据库。对数据库理解可能不十分到位,达者不必深究。

从数据存储模型上,一般将数据库分为key-value,document,column,graph和relational,对这些库都做了些生产应用或测试,简单记录一下,主要从适用情况,简单原理架构,可靠性等方面。

KV:redis
Document:mongoDB
Column Table:hadoop/hbase,cassandra
Graph:neo4j
Ralational:mysql,oracle,DB2,teradata

KV(redis2.6)
redis是一个开源的、高级键值数据库和数据结构服务程序,其中键可以保存字符串、散列、列表、集合和有序集合。ANSI C写成,采用单进程单线程模式,未使用libevent,自己根据IO multiplexing实现event loop,linux使用epoll,bsd使用kqueue。内存动态分配,默认使用jeMalloc,我在使用中换成TCMalloc,这两个性能和稳定性类似,主要是我的应用场景mem_fragmentation_ratio在TCMalloc下更理想。redis支持事务和批操作,pub/sub的性能也很好,2.6版本还支持lua(没试过),稳定性和性能极好,普通的处理器get/put可以到10w/s。
redis适用于各种结构的二进制缓存,可以作为集中session的服务器,在我的应用中php和tomcat都是用redis做session;高效的pub/sub服务端;redis和nginx的plugin可以做一些高性能页面方案;另外我在redis中直接缓存thrift序列化对象,效果相当好。
redis的部署方案:redis读写都是单线程,故只能使用服务器的一个CPU内核,可以根据cpu核心数,考虑网卡软终端能力后,一台服务器部署多个redis节点。
redis的HA:在官方Redis Sentinel出来之前,redis的HA采用双写的比较多,新浪微博就是这么做的。原来我只做了主从,没做过HA,也从来没崩过,现在我切换到了官方Redis Sentinel上。

Document(mongoDB2.4)
mongoDB是我抱有很大期望的,C++/BOOST开发,使用memory mapped storage engine,将数据文件按单个2G mmap到内存;单线程写,多线程读,没有写锁,写入内存即成功,异步flush到文件;可添加WAL增加数据恢复准确性。
mongoDB基于bson格式,collection存储,内置js引擎,可以替成V8。
mongoDB对CAP的支持都算到位,对于C,mongoDB默认是强一致性,以为它是单主结构,如果在读时使用slaveOK,可能会不一致,但保证最终一致性;对于A,mongoDB使用replica set来做集群,在master失败时选举一个slave到master;对于P,mongoDB实现了auto sharding,虽然在大数据时还是要预先做好sharding。总体来说,mongoDB还是CP。
mongoDB在经过单机可用性和aggregation framework两次加强后,已经可以在生产上使用了。
mongoDB适用场景:mongoDB适合数据比内存小的情况,适合SSD。
如果大量数据在磁盘上,mongoDB会做频繁的mmap操作,不适合数据不按时间热点分布的情况。
我在以下几个场景使mongoDB
1、数据小于内存,事务性要求不高,并发较大
2、用caped collection集中log4j的log
3、多维数据分析
另外,mongoDB的mapreduce是js写的,只能单线程,比较郁闷。

Column(Cassandra 1.2 /cloudera CDH4.2)
Cassandra的系统架构与Dynamo类似,是基于O(1)DHT的完全P2P架构,Cassandra可以几乎无缝地加入或删除节点,非常适于对于节点规模变化比较快的应用场景。
Cassandra的数据会写入多个节点,来保证数据的可靠性,在CAP问题上,Cassandra比较灵活,用户在读取时可以指定要求所有副本一致(C)、读到一个副本即可(A)或是通过选举来确认多数副本一致即可(折衷)。这样,Cassandra可以适用于有节点、网络失效,以及多数据中心的场景。
Cassandra基于java开发,但使用direct buffer而不是heap,可以避免fullgc的问题。
Cassandra基本还是适用于Key-Value的数据模型,如果强制索引有序,会导致数据严重不均衡。
mariadb10.0提供了cassandra的存储引擎,但也只是mysql的一个cassandra window。
------------------
hadoop/hbase的相关文档很多了,这里只记录一下我的使用方法
在hadoop集群中做一些olap中的事实表到汇总表的计算,由于公司的数据仓库(teradata)资源很紧张,有一些汇总工作找不到足够强大的单机,这时使用了hadoop进行处理,计算框架使用了pig,pig比hive好的地方是可以利用操作系统命令,随心所欲的用java写插件,初期计算结果就是pig算完后写入到mysql的。
后来汇总表的量也超过mysql的单机能力,又适逢hbase0.94/cdh4发布,就将pig计算的数据放入到hbase里,因为这时hbase的coprocessor已经可以实现二级索引,ad hoc的查询也基本可以满足。
hadoop/hbase的部署:
在部署hadoop时,最挠头的就是namenode的单点,在hadoop2时,可以使用共享存储来保存元数据,zookeeper调度的方式实现HA,这时使用了iSCSI的一个块存储作为共享,效果还不错。之前使用DRBD+heartbeat来实现。
hbase的关键在于主键的设计,等长,反向时间戳等是需要考虑的。
hbase虽然用的heap内存,但是因为精巧的存储结构设计,可以有效地避免fullgc

关于这部分单独讨论

graph(neo4j)
图形数据库善于处理大量复杂、互连接、低结构化的数据,这些数据变化迅速,需要频繁的查询。在关系数据库或其它结构数据库中,这些查询会产生性能上的问题。
图数据库工作中是用不到的,毕竟是企业应用,虽说有大量的互联网用户访问,但也远没有做成一个社区的考虑。纯粹兴趣
在经过几年的开发后,近日NeoTechnology发布了基于Java的图形数据库Neo4j 1.0,它遵循着属性图形数据模型。InfoQ有幸采访了NeoTechnology的COO Peter Neubauer以深入了解此次发布的Neo4j及其向开发者所提供的功能。
Neo4j中的信息主要有如下3个概念:
Node(又叫做vertex):类似于对象实例,拥有唯一的ID。
Relationship(又叫做edge):它连接了两个Node,此外还有方向和RelationshipType。
Property(又叫做attribute):他们是字符串类型的key/Object值对,Node与Relationship都有Property。
Neo4j围绕图形进行数据建模,Neo4j会以相同的速度遍历节点与边,其遍历速度与构成图形的数据量没有任何关系。此外,Neo4j还提供了非常快的图形算法、推荐系统和OLAP风格的分析。
Neo4j的读、写及遍历都是通过ACID事务系统进行管理的。图形遍历是通过Traverser API进行管理的。
Neo4j的HA如下图

Neo4j的问题是比较难水平扩展,访问基于REST API,性能较差。



Ralational
关系型数据库是企业应用中使用最多的,也是可以解决绝大多数问题的(不计成本的情况)。
在公司使用的RDBMS也比较杂,这和企业IT没有很好的规划有关。主要使用过Oracle,DB2,DB2 for Z/OS,teradata和mysql(ms sql也有用,但我没接触过)
oracle,曾经的数据库王者,RAC也是OLTP的终极方案,加上中国人口信息系统和淘宝,部署了oracle,名声最大。
oracle只支持read commited和serializable事务隔离级别,行锁是在行上加标记,不会造成锁升级。故而程序一般不会折腾死oracle。
oracle更适合在小机上工作,在X86服务器上总会出现假死,无论windows还是linux(windows要多很多)。

DB2
DB2数据库是公司硬件送的,没怎么在生产上用,DB2数据库支持4种事务隔离级别,在AIX上有行锁,页锁和表锁。windows和linux上没有页锁。在DB2的开发上,用惯oracle的人可能会不习惯,无意中会制造很多锁。
DB2 pureScale 技术秉承了 DB2 for z/OS Coupling Facility,在可靠性和可伸缩性上已经极大的超越了oracle的RAC。剩下的就是市场检验了。Coupling Facility已经是久经考验的了,就连Oracle创始人兼CEO Larry Ellison 也说:“我取笑过其他许多数据库,但唯独对大型机版本的 DB2 抱有尊重之心。它是当之无愧的一流技术。”

DB2 for z/OS
这个数据库其实是原来在os400上RPG的文件系统(说法欠妥),这是一个时代的产品,因为公司有这么一套服务在跑,得以接触一下,其实DB2 for z/OS的核心就是Coupling Facility。

teradata
teradata是公司的数据仓库在上面工作,虽然我喜欢的数据挖掘平台是DB2+Essbase+congnose。
teradata使用Shared Nothing的构建原则,包括三个部分:处理节点(Node),用于节点间通信的内部高速互联(InterConnection)和数据存储介质(通常是磁盘阵列)。多个节点一起构成一个MPP系统,多个节点之间的内部高速互联是通过BYNET的硬件来实现。
另外teradata一个重要概念是Clique,可以认为是node 级的容错机制,通过Vproc Migration技术,当一个TPA节点失败时,Teradata自动重启然后原来运行在失败节点上的Vproc漂移到clique内的其它节点上运行。
teradata了解不多,也没什么机会去了解了。

mysql/MariaDB
mysql是我使用的比较多的系统,一直以来,我都认为mysql可以胜任公司99%以上的数据库应用的要求,尤其在mysql5.5版本中,percona实现了XtraDB的innodb升级版引擎后,mysql已经是足以胜任各种任务了,现在我使用mysql的mariadb5.5的版本,这个版本是继承了XtraDB,同时又做了很多优化,如我最想在mysql中看到的hash join的功能。另外子查询优化也是做的十分到位,同时MariaDB Galera Cluster也是十分成熟了。
MariaDB的部署也十分灵活,根据对可靠性要求可以部署主-从,主-主(DRBD),主-主(ISCSI),Galera Cluster等。
另外fedora,opnsuse,Slackware,Arch Linux已经从mysql换成MariaDB了(debian/ubuntu什么时候换?)
在实际的使用中,基本上按照主-主(DRBD)+1从的方式,虽然可靠性不如共享存储,但也能达到3个9的水平。另外对于大并发的一些主键访问,开放了innoDB的socket handler,官方mysql5.6上innoDB有memcached协议的访问,但实测性能并不理想,不到socket handler的一半。




结束语:匆匆记录一下,有时间回头再补。
  • 大小: 158.1 KB
  • 大小: 1.3 MB
分享到:
评论

相关推荐

    计算机应用行业:国产数据库竞争格局盘点.pdf

    云数据库不仅具备传统数据库的管理和处理能力,还拥有云计算的弹性和灵活性,提供了按需付费的模式,极大降低了企业的使用成本。 在国产数据库领域,以人大金仓、武汉达梦、南大通用等为代表的国内厂商也在逐步扩大...

    国产数据库年终大盘点!.md

    本文带大家一起来盘点一下**国产数据库的发展现状**。此文为.md笔记 金融级高可用 融合OLTP和OLAP 标准SQL、事务与NoSQL的分布式存储相结合的JSON标准存储格式 多产品线的数据库(对标Oracle) 海量数据的时序...

    MOTOROLA MC1000 手持终端 盘点收发货程序 带WINCE数据库

    在Windows CE系统中,通常可以使用SQL Server CE(SQL Server Compact Edition)作为轻量级数据库解决方案。开发者可能需要了解如何创建数据库表、插入、更新和查询数据,以及如何在程序中连接和操作数据库。 源码...

    固定资产数据库.zip

    1. 资产登记:数据库允许企业详细记录每项资产的基本信息,如资产编号、购置日期、原值、折旧情况、使用部门、责任人等,确保资产信息的完整性。 2. 折旧计算:根据会计准则,固定资产需要定期进行折旧处理。数据库...

    盘点2013:21款最优秀的开源数据库.docx

    【盘点2013:21款最优秀的开源数据库】 在IT行业中,数据库扮演着至关重要的角色,支撑着各类软件项目。随着开源技术的日益普及,越来越多的企业和开发者选择使用开源数据库,以降低成本并获得更高的灵活性。以下是...

    foxpro数据库

    描述中提到的“解放141、六平柴、四大、东风、铲车、叉车”等,这些都是中国常见的汽车品牌和车型,表明这个数据库是为了解决中国市场上这些车辆的配件管理问题。对于自有汽车百台以上的企业,尤其那些拥有自己修理...

    盘点2013:21款最优秀的开源数据库.pdf

    【描述】:本文将详述2013年评选出的21款最佳开源数据库,这些数据库在当时的IT领域中表现出色,提供了丰富的功能和可靠的性能,满足了各种软件开发需求。 【标签】:“软件/插件”、“数据库”、“cs” 【部分...

    易语言EDB数据库例程 仓库管理

    例如,使用“打开数据库”命令打开EDB数据库,使用“创建数据库表”命令创建新的表格,再通过“插入数据库记录”命令向表格中添加数据。 在仓库管理中,我们可能需要创建如“库存表”这样的数据表,包含字段如...

    Access数据库经典模板

    此模板的核心是数据库的规范化设计,以及使用查询和报表来生成学生成绩报告。 4. **库存控制.mdb**:主要用于企业库存管理,包括物料、供应商、出入库记录等信息。用户可以实时监控库存水平,预防过度库存或缺货。...

    经典Access数据库系统

    3. **资产跟踪数据库.mdb**:对于企业资产管理至关重要,可以记录资产的购买日期、价值、位置、维护记录等信息,方便资产盘点和折旧计算,确保资产的安全和合理使用。 4. **联系人.mdb**:这是一个基础的联系人管理...

    超市终端数据库系统设计

    这些流程需要在数据库中得到体现,确保数据的一致性和完整性。例如,销售记录的生成不仅涉及商品信息,还关联到收银员、时间、支付方式等细节。 3. **终端数据管理**:超市终端可能包括收银机、自助结账设备、库存...

    服务器盘点登记表.docx

    行政信息 单位名称 使用部门 服务器管理员 资产编号 存放位置 服务器用途 硬件信息 品牌 型号 处理器 核心数量 内存 硬盘容量 系统环境信息 操作系统 数据库信息 IP地址(内网) IP地址(外网) 域名 系统自动更新 ...

    计算机应用行业:国产数据库竞争格局盘点.zip

    标题为"计算机应用行业:国产数据库竞争格局盘点"的资料,旨在探讨国内数据库市场的现状、主要参与者以及竞争态势。 一、国产数据库的崛起背景 随着云计算、大数据和人工智能等新兴技术的发展,对数据库的需求日益...

    一个超市收银系统,用eclipse开发,使用了数据库

    因此,系统会使用数据库事务来确保交易的正确性,防止因系统故障导致的数据不一致。 6. **库存管理**:系统需实时更新商品库存,当商品售出时减少库存,入库时增加库存。库存管理功能通常涉及库存查询、库存预警...

    数据库实训 企业仓储管理数据库设计

    1. **需求分析**:这一阶段主要是理解业务需求,明确仓储管理需要记录和处理的信息,如库存物品的入库、出库、盘点、库存状态等。同时,要识别关键业务流程,如订单处理、供应商管理、客户关系管理等。 2. **概念...

    金融与财务数据库.rar

    这些数据库的设计和使用,需要掌握Access的基本操作,包括表的创建、字段定义、关系设计、查询构建、报表设计和宏的编写。对于更高级的应用,还需要了解VBA(Visual Basic for Applications)编程,以便自定义功能和...

    NoSQL数据库渐入佳境 国内应用案例盘点.doc

    NoSQL数据库在这些公司的成功应用表明,它们在处理大数据和高并发场景时具有显著优势。然而,NoSQL并非万能,它在事务处理、复杂查询和数据一致性方面相对较弱,因此在选择数据库时,需根据具体业务需求进行权衡。 ...

    汽车销售管理系统数据库源码

    同时,定期的库存盘点功能也是必不可少的,这通常涉及数据库查询和库存差异分析。 除此之外,系统可能还包括报告和统计功能,通过查询数据库生成销售报告、进货报告等,为管理层提供决策支持。这些报告可能包括销售...

    仓库管理系统数据库设计.rar

    例如,“商品”与“供应商”之间可能存在一对多的关系,“商品”在“仓库”中有存储量,这些关系将在后续的逻辑模型和物理模型中得到体现。 三、逻辑模型设计 逻辑模型设计是将概念模型转化为具体的表结构。在这个...

    简易WINCE盘点软件

    3. **库存对比**:与后台数据库中的库存信息进行对比,找出差异,辅助库存盘点。 4. **错误检查**:软件可能具备一定的错误检查功能,如重复扫描提醒,防止数据录入错误。 5. **数据传输**:盘点完成后,通过无线...

Global site tag (gtag.js) - Google Analytics