浅尝key-value数据库(一)——一览NoSQL

最近由于一个项目的关系,研究了一下key-value数据库这个最近很火的概念。本系列从项目需求的角度分析并测试了几个key-value数据库的性能。

key-value数据库,又称作NoSQL数据库,他的最基本的基础原理就是CAP。

CAP是2000年PODC上Eric Brewer提出的一个概念,即

C -> Consistency;

A -> Availability;

P -> Tolerance to network Partitions;

You can have at most two of these properties for any shared-data system.

翻译成中文,大致是完备性、可用性、网络可分割性,三者不可兼得。

那么经典的关系型数据库在C,A两方面做的非常好,于是在互联网飞速发展的今天,在网络扩展方面出现了致命的硬伤。由于各种web2.0网站追求用户创造内容,于是产生了大量的写操作,关系型数据库的replication模式已经不能承受,数据库必须进行分割。但分割对于业务没有普遍性,于是数据库的扩容变得捉襟见肘。于是,key-value数据库应运而生。

key-value数据库就是尽可能地满足A,P两方面,甚至不惜牺牲C来满足。

于是在key-value数据库中,基本不支持事务,大多自带replication功能,可以很方便的分表以及分布式实现。

以下是robbin《NoSQL数据库探讨之一 -为什么要用非关系数据库?》一文中提到的一些著名的key-value数据库:

1、Redis Redis

本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作。但有硬伤就是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,并且它没有原生的可扩展机制,不具有可扩展能力,要依赖客户端来实现分布式读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

2、Tokyo Cabinet和Tokyo Tyrant

前者是一个高性能的存储引擎,后者是一个提供了多线程高并发的服务器。一听名字就是日本人开发的,最初被用在日本最大的SNS站点mixi.jp上。TC除了支持Key-Value存储之外,还支持保存Hashtable数据类型,因此很像一个简单的数据库表,并且还支持基于column的条件查询,分页查询和排序功能,基本上相当于支持单表的基础查询功能了,所以可以简单的替代关系数据库的很多操作。但他的主要缺点是在数据量达到上亿级别以后,并发写数据性能会大幅度下降——《NoSQL: If Only It Was That Easy》。

3、MongoDB

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,他主要是用来解决海量数据的访问效率问题。他的存储似乎对磁盘空间方面的需求比较大。新版本开始支持分布式。

4、Hypertable

Hypertable与类似的HBase都是从Google的Bigtable模式发展出来的,对分布式支持比较好,不过配置起来比较复杂。先介绍这几个吧,其他还有许多key-value数据库正在或已经发展起来。不过学术界似乎并不看好key-value数据库。在我看来,key-value现在很热,但是炒作的成分比较大,在真正的应用中还是应该根据自身的特点来选择数据存储方式才是王道。

浅尝key-value数据库(一)——一览NoSQL的更多相关文章

  1. 浅尝key-value数据库(三)——MongoDB的分布式

    浅尝key-value数据库(三)——MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replicat ...

  2. 浅尝key-value数据库(二)——MongoDB的优与劣

    浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源 ...

  3. 浅尝ECMAScript6

    浅尝ECMAScript6 简介 ECMAScript6 是最新的ECMAScript标准,于2015年6月正式推出(所以也称为ECMAScript 2015),相比于2009年推出的es5, es6 ...

  4. 五分钟DBA:浅谈伪分布式数据库架构

    [IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...

  5. 浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含自定义扫描组件.自定义导入组件.手动注册组件.自动注入方法和参数.使用Spring容器底层组件等 配置 @Confi ...

  6. 浅尝Spring注解开发_Servlet3.0与SpringMVC

    浅尝Spring注解开发_Servlet 3.0 与 SpringMVC 浅尝Spring注解开发,基于Spring 4.3.12 Servlet3.0新增了注解支持.异步处理,可以省去web.xml ...

  7. Python图形界面开发编程:wxPython(浅尝篇)

    Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 ...

  8. Apache Samza流处理框架介绍——kafka+LevelDB的Key/Value数据库来存储历史消息+?

    转自:http://www.infoq.com/cn/news/2015/02/apache-samza-top-project Apache Samza是一个开源.分布式的流处理框架,它使用开源分布 ...

  9. 浅尝Go语言GC

    大家好,我是小栈君,因为个人和工作的缘故,所以拖更了一点时间,但是关于拖更的内容小栈君会在后续的时间中补回来,还希望大家继续支持和关注小栈君.当然,在国内疫情稍微减缓的情况下,小栈君在这里也多说两句, ...

随机推荐

  1. 使用JQuery插件,排序Gridview的某个字段

    1. 前台代码 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server" ...

  2. 【原】Spring和Dubbo整合案例和过程

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...

  3. C++之对象存储空间_对象模型

    C++编译器如何完成面向对象理论向计算机程序的转化 #include<stdio.h>//////c++对象模型和结构体一样         class Test            { ...

  4. java 自定义BufferedReader_readLine

    import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import ...

  5. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  6. 使用 Async 和 Await 的异步编程 #Reprinted#

    异步方法容易编写 string urlContents = await client.GetStringAsync(); 以下特征总结了使上面一个异步方法. 方法签名包含一个 Async 或async ...

  7. 让Qt支持Win7的Aero和毛玻璃效果

    Qt5增加了许多特性,其中 Qt Windows Extras 模块就增加了对Win7 Aero 效果的支持. 官网的介绍如下: Qt Windows Extras provide classes a ...

  8. QT学习 之 对话框 (四) 字体对话框、消息对话框、文件对话框、进程对话框(超详细中文注释)

    QMessageBox类: 含有Question消息框.Information消息框.Warning消息框和Critical消息框等 通常有两种方式可以来创建标准消息对话框: 一种是采用“基于属性”的 ...

  9. JS获取中文拼音首字母,并通过拼音首字母高速查找页面内的中文内容

    实现效果: 图一: 图二: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVzdGNzX2Ru/font/5a6L5L2T/fontsize/400/f ...

  10. BZOJ 3544: [ONTAK2010]Creative Accounting( BST )

    题意 : 一段序列 , 求一段子序列和取余 M 的最大值 其实是一道水题... 前缀和 , 然后就是找 ( sum( r ) - sum( l ) ) % M 的最大值 . 考虑一个 sum( r ) ...