浅尝key-value数据库(一)——一览NoSQL
浅尝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的更多相关文章
- 浅尝key-value数据库(三)——MongoDB的分布式
浅尝key-value数据库(三)——MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replicat ...
- 浅尝key-value数据库(二)——MongoDB的优与劣
浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源 ...
- 浅尝ECMAScript6
浅尝ECMAScript6 简介 ECMAScript6 是最新的ECMAScript标准,于2015年6月正式推出(所以也称为ECMAScript 2015),相比于2009年推出的es5, es6 ...
- 五分钟DBA:浅谈伪分布式数据库架构
[IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...
- 浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配
Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含自定义扫描组件.自定义导入组件.手动注册组件.自动注入方法和参数.使用Spring容器底层组件等 配置 @Confi ...
- 浅尝Spring注解开发_Servlet3.0与SpringMVC
浅尝Spring注解开发_Servlet 3.0 与 SpringMVC 浅尝Spring注解开发,基于Spring 4.3.12 Servlet3.0新增了注解支持.异步处理,可以省去web.xml ...
- Python图形界面开发编程:wxPython(浅尝篇)
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 ...
- Apache Samza流处理框架介绍——kafka+LevelDB的Key/Value数据库来存储历史消息+?
转自:http://www.infoq.com/cn/news/2015/02/apache-samza-top-project Apache Samza是一个开源.分布式的流处理框架,它使用开源分布 ...
- 浅尝Go语言GC
大家好,我是小栈君,因为个人和工作的缘故,所以拖更了一点时间,但是关于拖更的内容小栈君会在后续的时间中补回来,还希望大家继续支持和关注小栈君.当然,在国内疫情稍微减缓的情况下,小栈君在这里也多说两句, ...
随机推荐
- C# Best Practices - Accessing and Using Classes
References and Using Do: Take care when defining references References must be one way (or circular ...
- lightOJ 1317 Throwing Balls into the Baskets
lightOJ 1317 Throwing Balls into the Baskets(期望) 解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/ ...
- _int64、long long 的区别
C++的64位整数[原]by 赤兔 http://baike.baidu.com/view/1235293.htm 在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其 ...
- 为什么cp很多小文件非常慢——对cp和rm命令的一些思考
linux中的文件复制命令——CP linux中文件剪切的命令——MV 1.问题背景 今天在某个目的动作过程中想把一个文件夹下的文件复制到另外的一个文件夹下 cp -fr ./dir1/ /d ...
- OpenGL ES 正反面设置指令
在OpenGL ES 中,仅有一种表面网格表示方式,那就是三角形. 三角形的三个顶点,可以组几个面?有答 1 的没有?有!那就是还不懂OpenGL ES 的我. 事实上,一张纸是有正反面的,那么一个三 ...
- 设计模式值六大原则——依赖倒置原则 (DIP)
依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 依赖倒置 ...
- tf–idf算法解释及其python代码实现(下)
tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...
- Spring MVC 入门基础
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入 原文链接:http://java.chinaitlab.com/advance/899129.html 基本上是一个精简版的 ...
- jquery-1.10.2.min.js之Multiple markers at this line
1.windows-preferences 输入validation 2. 点击进入 3. 将JavaScript validator for js files 的两个对勾去了就OK! 4 ...
- 数据切分——Mysql分区表的管理与维护
关于Mysql分区表的介绍可以参考: http://blog.csdn.net/jhq0113/article/details/44592865 关于Mysql分区表的创建可以参考: http://b ...