重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
常见的关系型数据库管理系统产品有Oracle、SQL Server、Sybase、DB2、Access等。 1.Oracle
在公安等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都网站设计、外贸营销网站建设 网站设计制作按需求定制网站,公司网站建设,企业网站建设,高端网站设计,成都营销网站建设,成都外贸网站建设公司,公安网站建设费用合理。
Oracle是1983年推出的世界上第一个开放式商品化关系型数据库管理系统。它采用标准的SQL结构化查询语言,支持多种数据类型,提供面向对象存储的数据支持,具有第四代语言开发工具,支持Unix、Windows NT、OS/2、Novell等多种平台。除此之外,它还具有很好的并行处理功能。Oracle产品主要由Oracle服务器产品、Oracle开发工具、Oracle应用软件组成,也有基于微机的数据库产品。主要满足对银行、金融、保险等企业、事业开发大型数据库的需求。
2.SQL Server
SQL即结构化查询语言(Structured Query Language,简称为SQL)。SQL Server最早出现在1988年,当时只能在OS/2操作系统上运行。2000年12月微软发布了SQL Server 2000,该软件可以运行于Windows NT/2000/XP等多种操作系统之上,是支持客户机/服务器结构的数据库管理系统,它可以帮助各种规模的企业管理数据。
随着用户群的不断增大,SQL Server在易用性、可靠性、可收缩性、支持数据仓库、系统集成等方面日趋完美。特别是SQL Server的数据库搜索引擎,可以在绝大多数的操作系统之上运行,并针对海量数据的查询进行了优化。目前SQL Server已经成为应用最广泛的数据库产品之一。
由于使用SQL Server不但要掌握SQL Server的操作,而且还要能熟练掌握Windows NT/2000 Server的运行机制,以及SQL语言,所以对非专业人员的学习和使用有一定的难度。
3.Sybase
1987年推出的大型关系型数据库管理系统Sybase,能运行于OS/2、Unix、Windows NT等多种平台,它支持标准的关系型数据库语言SQL,使用客户机/服务器模式,采用开放体系结构,能实现网络环境下各节点上服务器的数据库互访操作。技术先进、性能优良,是开发大中型数据库的工具。Sybase产品主要由服务器产品Sybase SQL Server、客户产品Sybase SQL Toolset和接口软件Sybase Client/Server Interface组成,还有著名的数据库应用开发工具PowerBuilder。
4.DB2
DB2是基于SQL的关系型数据库产品。20世纪80年代初期DB2的重点放在大型的主机平台上。到90年代初,DB2发展到中型机、小型机以及微机平台。DB2适用于各种硬件与软件平台。各种平台上的DB2有共同的应用程序接口,运行在一种平台上的程序可以很容易地移植到其他平台。DB2的用户主要分布在金融、商业、铁路、航空、医院、旅游等各个领域,以金融系统的应用最为突出。
5.Access
Access是在Windows操作系统下工作的关系型数据库管理系统。它采用了Windows程序设计理念,以Windows特有的技术设计查询、用户界面、报表等数据对象,内嵌了VBA(全称为Visual Basic Application)程序设计语言,具有集成的开发环境。Access提供图形化的查询工具和屏幕、报表生成器,用户建立复杂的报表、界面无需编程和了解SQL语言,它会自动生成SQL代码。
Access被集成到Office中,具有Office系列软件的一般特点,如菜单、工具栏等。与其他数据库管理系统软件相比,更加简单易学,一个普通的计算机用户,没有程序语言基础,仍然可以快速地掌握和使用它。最重要的一点是,Access的功能比较强大,足以应付一般的数据管理及处理需要,适用于中小型企业数据管理的需求。当然,在数据定义、数据安全可靠、数据有效控制等方面,它比前面几种数据库产品要逊色不少。
NoSQL,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的
SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
NoSQL(NoSQL
= Not Only SQL
),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数
据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
从这一新兴技术中选择一款正确的NoSQL数据库是非常具有挑战性的。比一下网建议在选择时考虑以下因素:
并发控制
并
发控制指的是当多个用户同时更新运行时,用于保护数据库完整性的各种技术。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。并发控制的目的是保
证一个用户的工作不会对另一个用户的工作产生不合理的影响。在某些情况下,这些措施保证了当用户和其他用户一起操作时,所得的结果和她单独操作时的结果是
一样的。在另一些情况下,这表示用户的工作按预定的方式受其他用户的影响。
封锁
就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
封锁是一次只允许一个用户读取或修改的一种机制,是实现并发控制的一个非常重要的技术。
MVCC
Multi-Version Concurrency Control多版本并发控制,维持一个数据的多个版本使读写操作没有冲突。MVCC优化了数据库并发系统,使系统在有大量并发用户时得到最高的性能,并且可以不用关闭服务器就直接进行热备份。
ACID
指
数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久
性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction
processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
None
一些系统不提供原子性。
镜像
数据库镜像是DBMS根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每当主数据库更新时,DBMS会自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。
镜像分为同步和异步。
数据存储
指的是数据的物理特性怎样被存储在数据库中。
磁盘 数据被存储在硬盘驱动器里;
GFS或谷歌文件系统是一个由谷歌开发的专有的分布式文件系统;
Hadoop是Apache软件框架,免费许可下支持数据密集型分布式应用程序;
RAM随机存储器;
插件 可以添加外部插件;
Amazon S3通过Web服务接口提供存储;
BDB:BDB
全称是 “Berkeley DB”,它是MySQL具有事务能力的表类型,由Sleepycat
Software开发。BDB表类型提供了MySQL用户长久期盼的功能,即事务控制能力。在任何RDBMS中,事务控制能力都是一种极其重要和宝贵的功
能。事务控制能力使得我们能够确保一组命令确实已经全部执行成功,或者确保当任何一个命令出现错误时所有命令的执行结果均被退回。
实现语言
实现语言会影响数据库的发展速度。典型的NoSQL数据库是用低级语言如C / C + +编写的。另一方面,那些更高层次的语言如Java,使自定义更容易。
实现语言有:C, C++, Erlang, Java, Python
特性
考虑下列哪一个特点对你的数据库是最重要的:
持久性
可用性
一致性
分区容忍性
证书类型
下面这些许可证是一个不同的开放源码许可的形式:
GPL:通用公共许可证
BSD:伯克利软件分发
MPL:Mozilla公共许可证
EPL:Eclipse公共许可证
IDPL:最初的开发者的公共许可证
LGPL:较宽松通用公共许可证
存储类型
存储类型是NoSQL数据库最大的不同,是决定使用哪款数据库的一个首要指标。
关键字:支持get、put和删除操作
按列存储:相对于传统的按行存储,数据集成容易多了
面向文件系统:存储像是JSON或XML这样的结构化文件,很容易就能从面向对象软件中获取数据。
大数据的由来
对于“大数据”(Big data)研究机构Gartner给出了这样的定义。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。
1
麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。
大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。
从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。
大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。
最小的基本单位是bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
大数据的应用领域
大数据无处不在,大数据应用于各个行业,包括金融、 汽车 、餐饮、电信、能源、体能和 娱乐 等在内的 社会 各行各业都已经融入了大数据的印迹。
制造业,利用工业大数据提升制造业水平,包括产品故障诊断与预测、分析工艺流程、改进生产工艺,优化生产过程能耗、工业供应链分析与优化、生产计划与排程。
金融行业,大数据在高频交易、社交情绪分析和信贷风险分析三大金融创新领域发挥重大作用。
汽车 行业,利用大数据和物联网技术的无人驾驶 汽车 ,在不远的未来将走入我们的日常生活。
互联网行业,借助于大数据技术,可以分析客户行为,进行商品推荐和针对性广告投放。
电信行业,利用大数据技术实现客户离网分析,及时掌握客户离网倾向,出台客户挽留措施。
能源行业,随着智能电网的发展,电力公司可以掌握海量的用户用电信息,利用大数据技术分析用户用电模式,可以改进电网运行,合理设计电力需求响应系统,确保电网运行安全。
物流行业,利用大数据优化物流网络,提高物流效率,降低物流成本。
城市管理,可以利用大数据实现智能交通、环保监测、城市规划和智能安防。
体育 娱乐 ,大数据可以帮助我们训练球队,决定投拍哪种 题财的 影视作品,以及预测比赛结果。
安全领域,政府可以利用大数据技术构建起强大的国家安全保障体系,企业可以利用大数据抵御网络攻击,警察可以借助大数据来预防犯罪。
个人生活, 大数据还可以应用于个人生活,利用与每个人相关联的“个人大数据”,分析个人生活行为习惯,为其提供更加周到的个性化服务。
大数据的价值,远远不止于此,大数据对各行各业的渗透,大大推动了 社会 生产和生活,未来必将产生重大而深远的影响。
大数据方面核心技术有哪些?
大数据技术的体系庞大且复杂,基础的技术包含数据的采集、数据预处理、分布式存储、NoSQL数据库、数据仓库、机器学习、并行计算、可视化等各种技术范畴和不同的技术层面。首先给出一个通用化的大数据处理框架,主要分为下面几个方面:数据采集与预处理、数据存储、数据清洗、数据查询分析和数据可视化。
数据采集与预处理
对于各种来源的数据,包括移动互联网数据、社交网络的数据等,这些结构化和非结构化的海量数据是零散的,也就是所谓的数据孤岛,此时的这些数据并没有什么意义,数据采集就是将这些数据写入数据仓库中,把零散的数据整合在一起,对这些数据综合起来进行分析。数据采集包括文件日志的采集、数据库日志的采集、关系型数据库的接入和应用程序的接入等。在数据量比较小的时候,可以写个定时的脚本将日志写入存储系统,但随着数据量的增长,这些方法无法提供数据安全保障,并且运维困难,需要更强壮的解决方案。
Flume NG
Flume NG作为实时日志收集系统,支持在日志系统中定制各类数据发送方,用于收集数据,同时,对数据进行简单处理,并写到各种数据接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三层架构:Agent层,Collector层和Store层,每一层均可水平拓展。其中Agent包含Source,Channel和 Sink,source用来消费(收集)数据源到channel组件中,channel作为中间临时存储,保存所有source的组件信息,sink从channel中读取数据,读取成功之后会删除channel中的信息。
NDC
Logstash
Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” 中。一般常用的存储库是Elasticsearch。Logstash 支持各种输入选择,可以在同一时间从众多常用的数据来源捕捉事件,能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
Sqoop
Sqoop,用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。Sqoop 启用了一个 MapReduce 作业(极其容错的分布式并行计算)来执行任务。Sqoop 的另一大优势是其传输大量结构化或半结构化数据的过程是完全自动化的。
流式计算
流式计算是行业研究的一个热点,流式计算对多个高吞吐量的数据源进行实时的清洗、聚合和分析,可以对存在于社交网站、新闻等的数据信息流进行快速的处理并反馈,目前大数据流分析工具有很多,比如开源的strom,spark streaming等。
Strom集群结构是有一个主节点(nimbus)和多个工作节点(supervisor)组成的主从结构,主节点通过配置静态指定或者在运行时动态选举,nimbus与supervisor都是Storm提供的后台守护进程,之间的通信是结合Zookeeper的状态变更通知和监控通知来处理。nimbus进程的主要职责是管理、协调和监控集群上运行的topology(包括topology的发布、任务指派、事件处理时重新指派任务等)。supervisor进程等待nimbus分配任务后生成并监控worker(jvm进程)执行任务。supervisor与worker运行在不同的jvm上,如果由supervisor启动的某个worker因为错误异常退出(或被kill掉),supervisor会尝试重新生成新的worker进程。
Zookeeper
Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,提供数据同步服务。它的作用主要有配置管理、名字服务、分布式锁和集群管理。配置管理指的是在一个地方修改了配置,那么对这个地方的配置感兴趣的所有的都可以获得变更,省去了手动拷贝配置的繁琐,还很好的保证了数据的可靠和一致性,同时它可以通过名字来获取资源或者服务的地址等信息,可以监控集群中机器的变化,实现了类似于心跳机制的功能。
数据存储
Hadoop作为一个开源的框架,专为离线和大规模数据分析而设计,HDFS作为其核心的存储引擎,已被广泛用于数据存储。
HBase
HBase,是一个分布式的、面向列的开源数据库,可以认为是hdfs的封装,本质是数据存储、NoSQL数据库。HBase是一种Key/Value系统,部署在hdfs上,克服了hdfs在随机读写这个方面的缺点,与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
Phoenix
Phoenix,相当于一个Java中间件,帮助开发工程师能够像使用JDBC访问关系型数据库一样访问NoSQL数据库HBase。
Yarn
Yarn是一种Hadoop资源管理器,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。Yarn由下面的几大组件构成:一个全局的资源管理器ResourceManager、ResourceManager的每个节点代理NodeManager、表示每个应用的Application以及每一个ApplicationMaster拥有多个Container在NodeManager上运行。
Mesos
Mesos是一款开源的集群管理软件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等应用架构。
Redis
Redis是一种速度非常快的非关系数据库,可以存储键与5种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘中,使用复制特性来扩展性能,还可以使用客户端分片来扩展写性能。
Atlas
Atlas是一个位于应用程序与MySQL之间的中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。Atlas启动后会创建多个线程,其中一个为主线程,其余为工作线程。主线程负责监听所有的客户端连接请求,工作线程只监听主线程的命令请求。
Kudu
Kudu是围绕Hadoop生态圈建立的存储引擎,Kudu拥有和Hadoop生态圈共同的设计理念,它运行在普通的服务器上、可分布式规模化部署、并且满足工业界的高可用要求。其设计理念为fast analytics on fast data。作为一个开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力。Kudu不但提供了行级的插入、更新、删除API,同时也提供了接近Parquet性能的批量扫描操作。使用同一份存储,既可以进行随机读写,也可以满足数据分析的要求。Kudu的应用场景很广泛,比如可以进行实时的数据分析,用于数据可能会存在变化的时序数据应用等。
在数据存储过程中,涉及到的数据表都是成千上百列,包含各种复杂的Query,推荐使用列式存储方法,比如parquent,ORC等对数据进行压缩。Parquet 可以支持灵活的压缩选项,显著减少磁盘上的存储。
数据清洗
MapReduce作为Hadoop的查询引擎,用于大规模数据集的并行计算,”Map(映射)”和”Reduce(归约)”,是它的主要思想。它极大的方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统中。
随着业务数据量的增多,需要进行训练和清洗的数据会变得越来越复杂,这个时候就需要任务调度系统,比如oozie或者azkaban,对关键任务进行调度和监控。
Oozie
Oozie是用于Hadoop平台的一种工作流调度引擎,提供了RESTful API接口来接受用户的提交请求(提交工作流作业),当提交了workflow后,由工作流引擎负责workflow的执行以及状态的转换。用户在HDFS上部署好作业(MR作业),然后向Oozie提交Workflow,Oozie以异步方式将作业(MR作业)提交给Hadoop。这也是为什么当调用Oozie 的RESTful接口提交作业之后能立即返回一个JobId的原因,用户程序不必等待作业执行完成(因为有些大作业可能会执行很久(几个小时甚至几天))。Oozie在后台以异步方式,再将workflow对应的Action提交给hadoop执行。
Azkaban
Azkaban也是一种工作流的控制引擎,可以用来解决有多个hadoop或者spark等离线计算任务之间的依赖关系问题。azkaban主要是由三部分构成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban将大多数的状态信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、认证、调度以及对工作流执行过程中的监控等;Azkaban Executor Server用来调度工作流和任务,记录工作流或者任务的日志。
流计算任务的处理平台Sloth,是网易首个自研流计算平台,旨在解决公司内各产品日益增长的流计算需求。作为一个计算服务平台,其特点是易用、实时、可靠,为用户节省技术方面(开发、运维)的投入,帮助用户专注于解决产品本身的流计算需求
数据查询分析
Hive
Hive的核心工作就是把SQL语句翻译成MR程序,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能。Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce。可以将Hive理解为一个客户端工具,将SQL操作转换为相应的MapReduce jobs,然后在hadoop上面运行。Hive支持标准的SQL语法,免去了用户编写MapReduce程序的过程,它的出现可以让那些精通SQL技能、但是不熟悉MapReduce 、编程能力较弱与不擅长Java语言的用户能够在HDFS大规模数据集上很方便地利用SQL 语言查询、汇总、分析数据。
Hive是为大数据批量处理而生的,Hive的出现解决了传统的关系型数据库(MySql、Oracle)在大数据处理上的瓶颈 。Hive 将执行计划分成map-shuffle-reduce-map-shuffle-reduce…的模型。如果一个Query会被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。在Hive的运行过程中,用户只需要创建表,导入数据,编写SQL分析语句即可。剩下的过程由Hive框架自动的完成。
Impala
Impala是对Hive的一个补充,可以实现高效的SQL查询。使用Impala来实现SQL on Hadoop,用来进行大数据实时查询分析。通过熟悉的传统关系型数据库的SQL风格来操作大数据,同时数据也是可以存储到HDFS和HBase中的。Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。Impala将整个查询分成一执行计划树,而不是一连串的MapReduce任务,相比Hive没了MapReduce启动时间。
Hive 适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据人员提供了快速实验,验证想法的大数据分析工具,可以先使用Hive进行数据转换处理,之后使用Impala在Hive处理好后的数据集上进行快速的数据分析。总的来说:Impala把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的map-reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。但是Impala不支持UDF,能处理的问题有一定的限制。
Spark
Spark拥有Hadoop MapReduce所具有的特点,它将Job中间输出结果保存在内存中,从而不需要读取HDFS。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
Nutch
Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬虫。
Solr
Solr用Java编写、运行在Servlet容器(如Apache Tomcat或Jetty)的一个独立的企业级搜索应用的全文搜索服务器。它对外提供类似于Web-service的API接口,用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Elasticsearch
Elasticsearch是一个开源的全文搜索引擎,基于Lucene的搜索服务器,可以快速的储存、搜索和分析海量的数据。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
还涉及到一些机器学习语言,比如,Mahout主要目标是创建一些可伸缩的机器学习算法,供开发人员在Apache的许可下免费使用;深度学习框架Caffe以及使用数据流图进行数值计算的开源软件库TensorFlow等,常用的机器学习算法比如,贝叶斯、逻辑回归、决策树、神经网络、协同过滤等。
数据可视化
对接一些BI平台,将分析得到的数据进行可视化,用于指导决策服务。主流的BI平台比如,国外的敏捷BI Tableau、Qlikview、PowrerBI等,国内的SmallBI和新兴的网易有数等。
在上面的每一个阶段,保障数据的安全是不可忽视的问题。
基于网络身份认证的协议Kerberos,用来在非安全网络中,对个人通信以安全的手段进行身份认证,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。
控制权限的ranger是一个Hadoop集群权限框架,提供操作、监控、管理复杂的数据权限,它提供一个集中的管理机制,管理基于yarn的Hadoop生态圈的所有数据权限。可以对Hadoop生态的组件如Hive,Hbase进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问HDFS文件夹、HDFS文件、数据库、表、字段权限。这些策略可以为不同的用户和组来设置,同时权限可与hadoop无缝对接。
简单说有三大核心技术:拿数据,算数据,卖数据。
对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached、FileSystem等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。但是往往又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache。而这种需求目前还没有看到有特别成熟的解决方案或工具,因此采用Gearman+PHP+MySQLUDF的组合异步实现MySQL到Redis的数据复制。MySQL到Redis数据复制方案无论MySQL还是Redis,自身都带有数据同步的机制,比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。那么理论上也可以用同样方式,分析MySQL的binlog文件并将数据插入Redis。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的。因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQLUDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHPGearmanWorker,将数据同步到Redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作。Gearman的安装与使用Gearman是一个支持分布式的任务分发框架。设计简洁,获得了非常广泛的支持。一个典型的Gearman应用包括以下这些部分:GearmanJobServer:Gearman核心程序,需要编译安装并以守护进程形式运行在后台GearmanClient:可以理解为任务的收件员,比如在后台执行一个发送邮件的任务,可以在程序中调用一个GearmanClient并传入邮件的信息,然后就可以将执行结果立即展示给用户,而任务本身会慢慢在后台运行。GearmanWorker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,GearmanWorker接收到GearmanClient传递的任务内容后,会按顺序处理。以前曾经介绍过类似的后台任务处理项目Resque。两者的设计其实非常接近,简单可以类比为:GearmanJobServer:对应Resque的Redis部分GearmanClient:对应Resque的Queue操作GearmanWorker:对应Resque的Worker和Job这里之所以选择Gearman而不是Resque是因为Gearman提供了比较好用的MySQLUDF,工作量更小。安装Gearman及PHPGearman扩展以下均以Ubuntu12.04为例。apt-getinstallgearmangearman-serverlibgearman-dev检查Gearman的运行状况:/etc/init.d/gearman-job-serverstatus*gearmandisrunning说明Gearman已经安装成功。PHP的Gearman扩展可以通过pecl直接安装peclinstallgearmanecho"extension=gearman.so"/etc/php5/conf.d/gearman.iniservicephp5-fpmrestart但是实测发现ubuntu默认安装的gearman版本过低,直接运行peclinstallgearman会报错configure:error:libgearmanversion1.1.0orlaterrequired因此Gearman+PHP扩展建议通过编译方式安装,这里为了简单说明,选择安装旧版本扩展:peclinstallgearman-1.0.3Gearman+PHP实例为了更容易理解后文Gearman的运行流程,这里不妨从一个最简单的Gearman实例来说明,比如要进行一个文件处理的操作,首先编写一个GearmanClient并命名为client.php:addServer();$client-doBackground('writeLog','Logcontent');echo'文件已经在后台操作';运行这个文件,相当于模拟用户请求一个Web页面后,将处理结束的信息返回用户:phpclient.php查看一下Gearman的状况:(echostatus;sleep0.1)|netcat127.0.0.14730可以看到输出为writeLog100.说明已经在Gearman中建立了一个名为writeLog的任务,并且有1个任务在队列等待中。而上面的4列分别代表当前的Gearman的运行状态:任务名称在等待队列中的任务正在运行的任务正在运行的Worker进程可以使用watch进行实时监控:watch-n1"(echostatus;sleep0.1)|nc127.0.0.14730"然后我们需要编写一个GearmanWorker命名为worker.php:addServer();$worker-addFunction('writeLog','writeLog');while($worker-work());functionwriteLog($job){$log=$job-workload();file_put_contents(__DIR__.'/gearman.log',$log."\n",FILE_APPEND|LOCK_EX);}Worker使用一个while死循环实现守护进程,运行phpworker.php可以看到Gearman状态变为:writeLog001同时查看同目录下gearman.log,内容应为从Client传入的值Logcontent。通过MySQLUDF+Trigger同步数据到GearmanMySQL要实现与外部程序互通的最好方式还是通过MySQLUDF(MySQLuserdefinedfunctions)来实现。为了让MySQL能将数据传入Gearman,这里使用了lib_mysqludf_json和gearman-mysql-udf的组合。安装lib_mysqludf_json使用lib_mysqludf_json的原因是因为Gearman只接受字符串作为入口参数,可以通过lib_mysqludf_json将MySQL中的数据编码为JSON字符串apt-getinstalllibmysqlclient-devwget/mysqludf/lib_mysqludf_json/archive/master.zipunzipmaster.zipcdlib_mysqludf_json-master/rmlib_mysqludf_json.sogcc$(mysql_config--cflags)-shared-fPIC-olib_mysqludf_json.solib_mysqludf_json.c可以看到重新编译生成了lib_mysqludf_json.so文件,此时需要查看MySQL的插件安装路径:mysql-uroot-pPASSWORD--execute="showvariableslike'%plugin%';"+---------------+------------------------+|Variable_name|Value|+---------------+------------------------+|plugin_dir|/usr/lib/mysql/plugin/|+---------------+------------------------+然后将lib_mysqludf_json.so文件复制到对应位置:cplib_mysqludf_json.so/usr/lib/mysql/plugin/最后登入MySQL运行语句注册UDF函数:CREATEFUNCTIONjson_objectRETURNSSTRINGSONAME'lib_mysqludf_json.so';安装gearman-mysql-udf方法几乎一样:apt-getinstalllibgearman-devwgetmakemakeinstall登入MySQL运行语句注册UDF函数:CREATEFUNCTIONgman_do_backgroundRETURNSSTRINGSONAME'libgearman_mysql_udf.so';CREATEFUNCTIONgman_servers_setRETURNSSTRINGSONAME'libgearman_mysql_udf.so';最后指定Gearman服务器的信息:SELECTgman_servers_set('127.0.0.1:4730');通过MySQL触发器实现数据同步最终同步哪些数据,同步的条件,还是需要根据实际情况决定,比如将数据表data的数据在每次更新时同步,那么编写Trigger如下:DELIMITER$$CREATETRIGGERdatatoredisAFTERUPDATEONdataFOREACHROWBEGINSET@ret=gman_do_background('syncToRedis',json_object(NEW.idas`id`,NEW.volumeas`volume`));END$$DELIMITER;尝试在数据库中更新一条数据查看Gearman是否生效。GearmanPHPWorker将MySQL数据异步复制到RedisRedis作为时下当热的NoSQL缓存解决方案无需过多介绍,其安装及使用也非常简单:apt-getinstallredis-serverpeclinstallredisecho"extension=redis.so"/etc/php5/conf.d/redis.ini然后编写一个GearmanWorker:redis_worker.php#!/usr/bin/envphpaddServer();$worker-addFunction('syncToRedis','syncToRedis');$redis=newRedis();$redis-connect('127.0.0.1',6379);while($worker-work());functionsyncToRedis($job){global$redis;$workString=$job-workload();$work=json_decode($workString);if(!isset($work-id)){returnfalse;}$redis-set($work-id,$workString);}最后需要将Worker在后台运行:nohupphpredis_worker.php通过这种方式将MySQL数据复制到Redis,经测试单Worker基本可以瞬时完成。
淘宝开源的TDDL和cobar的结合,放到了阿里云上就是DRDS,是商品,服务,可以购买使用的。可以在阿里云官网上注册免费试用。
=====================================================
随着互联网时代的到来,计算机要管理的数据量呈指数级别地飞速上涨,而我们却完全无法对用户数做出准确预估。我们的系统所需要支持的用户数,很可能在短短的一个月内突然爆发式地增长几千倍,数据也很可能快速地从原来的几百GB飞速上涨到了几百个TB。如果在这爆发的关键时刻,系统不稳定或无法访问,那么对于业务将会是毁灭性的打击。
伴随着这种对于系统性能、成本以及扩展性的新需要,以HBase、MongoDB为代表的NoSQL数据库和以阿里DRDS、VoltDB、ScaleBase为代表的分布式NewSQL数据库如雨后春笋般不断涌现出来。
本文将会介绍阿里DRDS的技术理念、发展历程、技术特性等内容。
DRDS设计理念
从20世纪70年代关系数据库创立开始,其实大家在数据库上的追求就从未发生过变化:更快的存取数据,可以按需扩缩以承载更大的访问量和更大的数据量,开发容易,硬件成本低,我们可以把这叫做数据库领域的圣杯。
为了支撑更大的访问量和数据量,我们必然需要分布式数据库系统,然而分布式系统又必然会面对强一致性所带来的延迟提高的问题,因为网络通信本身比单机内通信代价高很多,这种通信的代价就会直接增加系统单次提交的延迟。延迟提高会导致数据库锁持有时间变长,使得高冲突条件下分布式事务的性能不升反降(这个具体可以了解一下Amdahl定律),甚至性能距离单机数据库都还有明显的差距。
从上面的说明,我们可以发现,问题的关键并不是分布式事务做不出来,而是做出来了却因为性能太差而没有什么卵用。数据库领域的高手们努力了40年,但至今仍然没有人能够很好地解决这个问题,Google Spanner的开发负责人就经常在他的Blog上谈论延迟的问题,相信也是饱受这个问题的困扰。
面对这个难题,传统的关系数据库选择了放弃分布式的方案,因为在20世纪70~80年代,我们的数据库主要被用来处理企业内的各类数据,面对的用户不过几千人,而数据量最多也就是TB级别。用单台机器来处理事务,用个磁盘阵列处理一下磁盘容量不够的问题,基本上就能解决一切问题了。
然而,信息化和互联网的浪潮改变了这一切,我们突然发现,我们服务的对象发生了根本性变化,从原来的几千人,变成了现在的几亿人,数据量也从TB级别到了PB级别甚至更多。存在单点的单机系统无论如何努力,都会面对系统处理能力的天花板。原来的这条路,看起来是走不下去了,我们必须想办法换一条路来走。
可是,分布式数据库所面对的强一致性难题却像一座高山,人们努力了无数个日日夜夜,但能翻越这座山的日子看来仍然遥遥无期。
于是,有一群人认为,强一致性这件事看来不怎么靠谱,那彻底绕开这个问题是不是个更好的选择?他们发现确实有那么一些场景是不需要强一致事务的,甚至连SQL都可以不要,最典型的就是日志流水的记录与分析这类场景。而去掉了事务和SQL,接口简单了,性能就更容易得到提升,扩展性也更容易实现,这就是NoSQL系统的起源。
虽然NoSQL解决了性能和扩展性问题,但这种绕开问题的方法给用户带来了很多困扰,系统的开发成本也大大提升。这时候就有另外一群人,他们觉得用户需要SQL,觉得用户也需要事务,问题的关键在于我们要努力地往圣杯的方向不断前进。在保持系统的扩展性和性能的前提下,付出尽可能小的代价来满足业务对数据库的需要。这就是NewSQL这个理念的由来。
DRDS也是一个NewSQL的系统,它与ScaleBase、VoltDB等系统类似,都希望能够找到一条既能保持系统的高扩展性和高性能,又能尽可能保持传统数据库的ACID事务和SQL特性的分布式数据库系统。
DRDS发展历程
在一开始,TDDL的主要功能就是做数据库切分,一个或一组SQL请求提交到TDDL,TDDL进行规则运算后得知SQL应该被分发到哪个机器,直接将SQL转发到对应机器即可(如图1)。
图1 TDDL数据库切分
开始的时候,这种简单的路由策略能够满足用户的需要,我们开始的那些应用,就是通过这样非常简单的方式完成了他所有的应用请求。我们也认为,这种方案简单可靠,已经足够好用了。
然而,当我们服务的应用从十几个增长到几百个的时候,大量的中小应用加入,大家纷纷表示,原来的方案限制太大,很多应用其实只是希望做个读写分离,希望能有更好的SQL兼容性。
于是,我们做了第一次重大升级,在这次升级里,我们提出了一个重要的概念就是三层架构,Matrix对应数据库切分场景,对SQL有一定限制,Group对应读写分离和高可用场景,对SQL几乎没有限制。如图2所示。
图2 数据库升级为三层架构
这种做法立刻得到了大家的认可,TDDL所提供的读写分离、分库分表等核心功能,也成为了阿里集团内数据库领域的标配组件,在阿里的几乎所有应用上都有应用。最为难得的是,这些功能从上线后,到现在已经经历了多年双11的严酷考验,从未出现过严重故障(p0、p1级别故障属于严重故障)。数据库体系作为整个应用系统的重中之重,能做到这件事,真是非常不容易。
随着核心功能的稳定,自2010年开始,我们集中全部精力开始关注TDDL后端运维系统的完善与改进性工作。在DBA团队的给力配合下,围绕着TDDL,我们成功做到了在线数据动态扩缩、异步索引等关键特征,同时也比较成功地构建了一整套分布式数据库服务管控体系,用户基本上可以完全自助地完成整套数据库环境的搭建与初始化工作。
大概是2012年,我们在阿里云团队的支持下,开始尝试将TDDL这套体系输出到阿里云上,也有了个新的名字:阿里分布式数据库服务(DRDS),希望能够用我们的技术服务好更多的人。
不过当我们满怀自信地把自己的软件拿到云上的时候,却发现我们的软件距离用户的要求差距很大。在内部因为有DBA的同学们帮助进行SQL review,所以SQL的复杂度都是可控的。然而到了云上,看了各种渠道提过来的兼容性需求,我们经常是不自觉地发出这样的感叹:“啊?原来这种语法MySQL也是可以支持的?”
于是,我们又进行了架构升级,这次是以兼容性为核心目标的系统升级工作,希望能够在分布式场景下支持各类复杂的SQL,同时也将阿里这么多年来在分布式事务上的积累都带到了DRDS里面。
这次架构升级,我们的投入史无前例,用了三年多才将整个系统落地完成。我们先在内部以我们自己的业务作为首批用户上线,经过了内部几百个应用的严酷考验以后,我们才敢拿到云上,给到我们的最终用户使用。
目前,我们正在将TDDL中更多的积累输出到云上,同时也努力优化我们的用户界面。PS:其实用户界面优化对我们这种专注于高性能后端技术的团队来说,才是最大的技术挑战,连我也去学了AngularJS,参与了用户UI编。
DRDS主要功能介绍
发展历史看完了,下面就由我来介绍一下目前我们已经输出到云上的主要功能。
【分布式SQL执行引擎】
分布式SQL引擎主要的目的,就是实现与单机数据库SQL引擎的完全兼容。目前我们的SQL引擎能够做到与MySQL的SQL引擎全兼容,包括各类join和各类复杂函数等。他主要包含SQL解析、优化、执行和合并四个流程,如图3中绿色部分。
图3 SQL引擎实现的主要流程
虽然SQL是兼容的,但是分布式SQL执行算法与单机SQL的执行算法却完全不同,原因也很简单,网络通信的延迟比单机内通信的延迟大得多。举个例子说明一下,我们有份文件要从一张纸A上誊写到另外一张纸B上,单机系统就好比两张纸都在同一个办公室里,而分布式数据库则就像是一张纸在北京,一张纸在杭州。
自然地,如果两张纸在同一个办公室,因为传输距离近,逐行誊写的效率是可以接受的。而如果距离是北京到杭州,用逐行誊写的方式,就立刻显得代价太高了,我们总不能看一行,就打个“飞的”去杭州写下来吧。在这种情况下,还是把纸A上的信息拍个照片,【一整批的】带到杭州去处理,明显更简单一些。这就是分布式数据库特别强调吞吐调优的原因,只要是涉及到跨机的所有查询,都必须尽可能的积攒一批后一起发送,以减少系统延迟提高带来的不良影响。
【按需数据库集群平滑扩缩】
DRDS允许应用按需将新的单机存储加入或移出集群,DRDS则能够保证应用在迁移流程中实现不停机扩容缩容。
图4 DRDS按需进行平滑扩缩
在内部的数据库使用实践中,这个功能的一个最重要应用场景就是双11了。在双11之前,我们会将大批的机器加入到我们的数据库集群中,抗过了双11,这批机器就会下线。
当DRDS来到云上,我们发现双11其实不仅仅只影响阿里内部的系统。在下游的各类电商辅助性系统其实也面对巨大压力。在双11前5天,网聚宝的熊总就找到我说,担心撑不过双11的流量,怕系统挂。于是我们就给他介绍了这个自动扩容的功能怎么用,他买了一个月的数据库,挂接在DRDS上。数据库能力立刻翻倍,轻松抗过了双11,也算是我印象比较深刻的一个案例了。
因为我们完全无法预测在什么时间点系统会有爆发性的增长,而如果在这时候系统因为技术原因不能使用,就会给整个业务带来毁灭性的影响,风口一旦错过,就追悔莫及了。我想这就是云计算特别强调可扩展能力的原因吧。
【小表广播】
小表广播也是我们在分布式数据库领域内最常用的工具之一,他的核心目的其实都是一个——尽可能让查询只发生在单机。
让我们用一个例子来说明,小表广播的一般使用场景。
图5 小表广播场景
图5中,如果我想知道买家id等于0的用户在商城里面买了哪些商品,我们一般会先将这两个表join起来,然后再用where平台名=”商城” and buyerID = 0找到符合要求的数据。然而这种join的方式,会导致大量的针对左表的网络I/O。如果要取出的数据量比较大,系统延迟会明显上升。
这时候,为了提升性能,我们就必须要减少跨机join的网络代价。我们比较推荐应用做如下处理,将左表复制到右表的每一个库上。这样,join操作就由分布式join一下变回到本地join,系统的性能就有很大的提升了,如图6所示。
图6
【分布式事务套件】
在阿里巴巴的业务体系中存在非常多需要事务类的场景,下单减库存,账务,都是事务场景最集中的部分。
而我们处理事务的方法却和传统应用处理事务的方案不大一样,我们非常强调事务的最终一致性和异步化。利用这种方式,能够极大地降低分布式系统中锁持有的时间,从而极大地提升系统性能。
图7 DRDS分布式事务解决套件
这种处理机制,是我们分布式事务能够以极低成本大量运行的最核心法门。在DRDS平台内,我们将这些方案产品化,为了DRDS的分布式事务解决套件。
利用他们,能够让你以比较低的成本,实现低延迟,高吞吐的分布式事务场景。
DRDS的未来
阿里分布式数据库服务DRDS上线至今,大家对这款产品的热情超出了我们的预期,短短半年内已经有几千个申请。
尽管还在公测期,但是大家就已经把关系到身家性命的宝贵在线数据业务放到了DRDS上,我能够感受到这份沉甸甸的信赖,也不想辜负这份信赖。
经过阿里内部几千个应用的不断历练,DRDS已经积累出一套强大的分布式SQL执行引擎和和一整套分布式事务套件。
我也相信,这些积累能够让用户在基本保持单机数据库的使用习惯的前提下,享受到分布式数据库高性能可扩展的好处。
在平时的DRDS支持过程中,我面对最多的问题就是,DRDS能不能够在不改变任何原有业务逻辑和代码的前提下,实现可自由伸缩和扩展呢?十分可惜的是,关系数据库发展至今,还没有找到既能保留传统数据库一切特性,又能实现高性能可扩展数据库的方法。
然而,虽不能至,吾心向往之!我们会以“可扩展,高性能”为产品核心,坚定地走在追寻圣杯的路上,并坚信最终我们一定能够找寻到它神圣的所在。
作者简介:王晶昱,花名沈询,阿里巴巴资深技术专家。目前主要负责阿里的分布式数据库DRDS(TDDL)和阿里的分布式消息服务ONS(RocketMQ/Notify)两个系统。
开源世界中的那几个免费数据库
发布时间:2011-11-22 09:34:30 来源:CSDN 评论:0 点击:1476 次 【字号:大 中 小】
QQ空间 新浪微博 腾讯微博 人人网 豆瓣网 百度空间 百度搜藏 开心网 复制 更多 0
开源数据库MySQLMySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源...
开源数据库MySQL
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
盘点:开源社区那些免费的数据库软件
MySQL为多种编程语言提供了API,包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。而其自身是采用C和C++编写的,使用了多种编译器进行测试,所以,MySQL能够保证源代码具有很强的可移植性。这样的一款数据库,自然能够支持几乎所有的操作系统,从Unix、Linux到Windows,具体包括AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。最重要的是,它是一个可以处理拥有上千万条记录的大型数据库。
与此同时,MySQL也产生了很多分支版本的数据库也非常值得推荐。
首先是MariaDB,它是一个采用Maria存储引擎的MySQL分支版本,是由原来MySQL的作者 Michael Widenius创办的公司所开发的免费开源的数据库服务器。与MySQL相比较,MariaDB更强的地方在于它拥有更多的引擎,包括Maria存储引擎、PBXT存储引擎、XtraDB存储引擎、FederatedX存储引擎,它能够更快的复制查询处理、运行的速度更快、更好的功能测试以及支持对Unicode的排序等。
其次是rcona,它为MySQL数据库服务器进行了改进,在功能和性能上较MySQL有着很显著的提升。该版本提升了在高负载情况下的InnoDB的性能,同时,它还为DBA提供一些非常有用的性能诊断工具,并且提供很多参数和命令来控制服务器行为。
第三是Percona Server,它使用了诸如google-mysql-tools、Proven Scaling和 Open Query对MySQL进行改造。并且,它只包含MySQL的服务器版,并没有提供相应对 MySQL的Connector和GUI工具进行改进。
非关系型数据库NoSQL
从NoSQL的字面上理解,NoSQL就是Not Only SQL,被业界认为是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
盘点:开源社区那些免费的数据库软件
当然,NoSQL也是随着互联网Web2.0网站的兴起才能取得长足的进步。关键的需求在于,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
首先推荐的是Oracle NoSQL Database,这是一个社区版。Oracle的这个NoSQL Database, 是在10月4号的甲骨文全球大全上发布的Big Data Appliance的其中一个组件,Big Data Appliance是一个集成了Hadoop、NoSQL Database、Oracle数据库Hadoop适配器、Oracle数据库Hadoop装载器及R语言的系统。
其次推荐的是Membase。Membase是NoSQL家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Source tarballs上,目前可以下载beta版本的Linux二进制包。该产品主要是由North Scale的memcached核心团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区网络空间的供应商。
并且,Membase容易安装、操作,可以从单节点方便的扩展到集群,而且为memcached(有线协议的兼容性)实现了即插即用功能,在应用方面为开 发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。通过兼容多种编程语言和框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和编程接口,包括可配置 的告警信息。
Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的节点进行复制。 另外,对存储的数据进行再分配仍然是必要的。
第三推荐的是Hibari。Hibari在日语中意思为“云雀”,它是一个专为高可靠性和大数据存储的数据库引擎,可用于云计算环境中,例如 webmail、SNS和其他要求T/P级数据存储的环境中。同时,Hibari也支持Java,C/C++,Python,Ruby和Erlang语言的客户端。
第四推荐的是memcachedb。这是一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是 不需要严格事务约束,能够被持久化保存的应用场景,例如memcachedb被应用在新浪博客上面。
第五推荐的是Leveldb。这是一个Google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计,特别是LSM算法。LevelDB是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。
XML数据库的优势
XML数据库是一种支持对XML格式文档进行存储和查询等操作的数据管理系统。在系统中,开发人员可以对数据库中的XML文档进行查询、导出和指定格式的序列化。目前XML数据库有三种类型:XMLEnabledDatabase(XEDB),即能处理XML的数据库;NativeXMLDatabase(NXD),即纯XML数据库;HybridXMLDatabase(HXD),即混合XML数据库。
关系数据库中的第一代XML支持是切分(或分解)文档,以适应关系表格或将文档原封不动地存储为字符或二进制大对象(CLOB 或 BLOB)。这两个方法中的任一种都尝试将XML模型强制转换成关系模型。然而,这两种方法在功能和性能上都有很大的局限性。混合型模型将XML存储在类似于DOM的模型中。XML数据被格式化为缓冲数据页,以便快速导航和执行查询以及简化索引编制。
在这里,首要要推荐的XML数据库是Sedna。它号称是一款原生态的XML数据库,提供了全功能的核心数据库服务,包括持久化存储、ACID事务、索引、安全、热备、UTF8等。实现了 W3C XQuery 规范,支持全文搜索以及节点级别的更新操作。
第二款XML数据库是BaseX。这款数据库用来存储紧缩的XML数据,提供了高效的 XPath和XQuery的实现,同时,它还提供一个前端操作界面。
盘点:开源社区那些免费的数据库软件
第三款推荐的是XMLDB。这款数据库使用了关系型数据库来存储任意的XML文档,因为所采用的存储机制,所以文档的搜索速度特别快,同时执行XSL转换也相当快。XMLDB同时还提供了一个PHP的模块,可以应用在Web应用中。
第四块推荐的是X-Hive/DB。它是一个为需要高级XML数据处理和存储功能的软件开发者设计的强大的专属XML数据库。X-Hive/DB Java API包含存储、查询、检索、转换和发表XML数据的方法。
与传统关系型数据库相比,XML数据库具有以下优势:第一,XML数据库能够对半结构化数据进行有效的存取和管理。如网页内容就是一种半结构化数据,而传统的关系数据库对于类似网页内容这类半结构化数据无法进行有效的管理。第二,提供对标签和路径的操作。传统数据库语言允许对数据元素的值进行操作,不能对元素名称操作,半结构化数据库提供了对标签名称的操作,还包括了对路径的操作。第三,当数据本身具有层次特征时,由于XML数据格式能够清晰表达数据的层次特征,因此XML数据库便于对层次化的数据进行操作。XML数据库适合管理复杂数据结构的数据集,如果己经以XML格式存储信息,则XML数据库利于文档存储和检索;可以用方便实用的方式检索文档,并能够提供高质量的全文搜索引擎。另外XML数据库能够存储和查询异种的文档结构,提供对异种信息存取的支持。