key-value数据库

2023-11-07

        传统的文件系统中,需要维护目录的层次结构,使用dentry,inode,directory等复杂结构保存元数据的信息;而面对更多定制文件系统的需求,越来越多的系统考虑使用key-value形式保存文件系统中的元数据信息。使用数据库来保存这些元数据的key-value对是一个不错的选择,相比传统的关系型数据库,key-value数据库在这方面更贴近应用需求,因为,保存元数据的数据库往往不会有复杂的关系操作,仅仅需要提供高效的读写性能,可靠性和持久化。

Berkeley DB

比较经典的key-value数据库,C语言开发,能够提供较高的读写性能,支持海量存储应用,数据库自身实现了备份机制,支持两种备份开发机制,接口简单。开源,但是貌似现在没有人维护了,据说在持久化上做得不太好。

 

SQLite

1. ACID事务
2. 零配置 – 无需安装和管理配置
3. 储存在单一磁盘文件中的一个完整的数据库
4. 数据库文件可以在不同字节顺序的机器间自由的共享
5. 支持数据库大小至2TB
6. 足够小, 大致3万行C代码, 250K
7. 比一些流行的数据库在大部分普通数据库操作要快
8. 简单, 轻松的API
9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
10. 良好注释的源代码, 并且有着90%以上的测试覆盖率
11. 独立: 没有额外依赖
12. Source完全的Open, 你可以用于任何用途, 包括出售它
13. 支持多种开发语言,C, PHP, Perl, Java, ASP .NET,Python


相关文章:http://www.sqlite.com.cn/


Redis
Redis是一个很新的项目。Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作。Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存List链表和Set集合的数据结构,而且还支持对List进行各种操作,它的值可以是string,list,sets,或者是ordered sets。
例如 从List两端push和pop数据,取List区间,排序等等,对Set支持各种集合的并集交集操作,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,并且它没有原生的可扩展机制,不具有scale(可扩展)能力,要依赖客户端来实现分布式读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。根据Redis的官网测试报告,50个并发请求,10w次访问,写速度为11x10e4/s,读速度为8100次/s.目前使用Redis的网站有 github,Engine Yard。

基本数据类型介绍:http://www.cnblogs.com/xhan/archive/2011/02/02/1948891.html

http://timyang.net/data/redis-misunderstanding/

 交互命令:http://redis.io/commands



Tokyo Cabinet和Tokoy Tyrant
TC和TT的开发者是日本人Mikio Hirabayashi,主要被用在日本最大的SNS网站mixi.jp上,TC发展的时间最早,现在已经是一个非常成熟的项目,也是Kye-Value 数据库领域最大的热点,现在被广泛的应用在很多很多网站上。TC是一个高性能的存储引擎,而TT提供了多线程高并发服务器,性能也非常出色,每秒可以处理 4-5万次读写操作。TC除了支持Key-Value存储之外,还支持保存Hashtable数据类型,因此很像一个简单的数据库表,并且还支持基于column的条件 查询,分页查询和排序功能,基本上相当于支持单表的基础查询功能了,所以可以简单的替代关系数据库的很多操作。TC/TT在mixi的实际应用当中,存储了2000万条以上的数据,同时支撑了上万个并发连接,是一个久经考验的项目。TC在保证了极高的并发读写性能的同时,具有可靠的数据持久化机制,同时还支持类似关系数据库表结构的hashtable以及简单的条件,分页和排序操作,是一个很棒的NoSQL 数据库。

TC的主要缺点是在数据量达到上亿级别以后,并发写数据性能会大幅度下降,NoSQL: If Only It Was That Easy提到,他们发现在TC里面插入1.6亿条2-20KB数据的时候,写入性能开始急剧下降。看来是当数据量上亿条的时候,TC性能开始大幅度下降, 从TC作者自己提供的mixi数据来看,至少上千万条数据量的时候还没有遇到这么明显的写入性能瓶颈。Flare,是对TC和TT的改进,主要是支持可扩展性。

 

MongoDB
满足海量存储需求,Mongo主要解决的是海量数据的访问效率问题,根据官方的文档,当数据量达到50GB以上的时候,Mongo的数据库访问速度是MySQL的10 倍以上。Mongo的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万-1.5次读写请求

 

CouchDB
支持海量存储,CouchDB仅仅提供了基于HTTP REST的接口,因此CouchDB单纯从并发读写性能来说,是非常糟糕的。

 

Cassandra

满足高可扩展性和可用性的面向分布式计算的数据库,被看做是一个开源的google的big table。Facebook,twitter和digg.com都在使用Cassandra。Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被 复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情, 只管在群集里面添加节点就可以了。看到有文章说Facebook的Cassandra群集有超过100台服务器构成的数据库群集。Cassandra以单个节点来衡量,其节点的并发读写性能不是特别好,有文章说评测下来Cassandra每秒大约不到1万次读写请求,其并发性 能取决于整个系统的节点数量,路由效率,而不仅仅是单节点的并发负载能力。

 

Voldemort

和Cassandra类似,也是提供高可扩展性和可用性的面向分布式计算的数据库。Voldemort官方给出Voldemort的并发读写 性能也很不错,每秒超过了1.5万次读写。

 

LevelDB

google开发的数据库,LevelDB是一个嵌入式的key-value数据库。它的键和关联值可以是任意的字节数组,并且按照键值排序,排序机制是可以被重载的。数据存储机制非常简单,仅仅支持Put,Get和Delete命令,然后还有前向和后向迭代遍历。数据会自动使用Snappy压缩,这是一个压缩库,Google将其用于BigTable,MapReduce和RPC中,并且宣布开源。LevelDB也有一些局限:不支持 SQL查询和索引,支持多线程单进程访问,并且可以用于嵌入式设备。LevelDB优化了批量写操作。它将多个修改请求有序缓存在内存中,在累计到配置文件预设置的阈值之后再写入到磁盘中。对于顺序和随机写操作,以及顺序读操作来说,它的性能非常优秀,根据Google的性能基准测试,它能在某些测试项目中得分领先SQLite两个数量级。SQLite在随机读操作中比LevelDB稍好,而在写入较大数据的时候速度两倍快于LevelDB。LevelDB同样也表现得比Kyoto Cabinet优秀,Kyoto Cabinet也是一个key-value数据库,不过Google并没有像SQLite那样在所有测试项目中均进行比较。同样,Riak进行了一些测试对比LevelDB和InnoDB,在一些测试项目中,Google的LevelDB要比InnoDB要优秀或者能达到相同性能。LevelDB是使用C++编写,一些外部的依赖库已经成功地移植到Windows、Mac OS X、Android和各种Unix上。在实际的应用中,Chrome的一些实验性版本中已经使用了LevelDB,将其作为IndexDB API的实现。而Riak则将其用于节点级的存储。

 

nosql

常规关系型数据库仅仅支持每秒数千次或是数万次的访问,内存数据库的访问速度可以达到几万次到十多万次,支持高并发,海量存储,高可扩展性和高可用性

 

 

 

参考资料:

http://blog.csdn.net/21aspnet/article/details/6614013

http://blog.evanweaver.com/articles/2009/07/06 /up-and-running-with-cassandra

http://hb.qq.com/a/20110823/000019.htm

http://www.docin.com/p-115838909.html

http://www.iteye.com/topic/617156

http://blog.s135.com/dtcc/

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

key-value数据库 的相关文章

  • redis能完全取代mysql吗?

    简单的问题 我是否可以使用 redis 而不是 mysql 来处理各种 Web 应用程序 社交网络 地理位置服务等 IT 领域没有什么是不可能的 但有些事情可能会变得极其复杂 将键值存储用于全文搜索之类的事情可能会非常痛苦 另外 据我所知
  • 如何在 sqlite3 数据库中存储音频文件并在 iphone 中播放它们?

    我想在数据库中存储音频文件 任何支持 mp3 wav 和 iphone 的格式 并在 iPhone 上播放它们 知道如何做到这一点吗 我不知道为什么你想将音频文件存储在 SQL 数据库中 但 sqlite3 支持 BLOB 因此 将它们存储
  • 不使用 CPU 时 Cassandra 超时

    我使用 Phantom DSL 和 Datastax Cassandra 驱动程序时遇到 Cassandra 超时 然而 Cassandra 似乎并没有超载 以下是我得到的异常 com datastax driver core except
  • 如何过滤 Cassandra 中的数据?

    我在应用程序中使用 mySQL 一段时间了 收集的数据越多 速度就越慢 所以我一直在研究 NOSQL 选项 我在 mySQL 中拥有的东西之一是从一堆连接创建的视图 该应用程序在网格中显示所有重要信息 用户可以在此数据集上选择范围 进行搜索
  • SQLite 更新很多行非常慢

    我相信我已经使用了很多方法来加速许多行的更新 但到目前为止没有任何帮助 我们正在开立交易 像这样 private SQLiteTransaction BeginTransaction SQLiteConnection connection
  • iOS7 后台同步

    我们必须开发一个应用程序 无论该应用程序是在前台还是在后台 都支持在某个时间间隔进行数据同步操作 我想知道在iOS7中 当应用程序在后台运行时 是否可以同步数据 即调用网络服务 我们可以在应用程序处于后台时访问 SQLite 数据库文件 我
  • 从 CouchDB 检索分层/嵌套数据

    我对 couchDB 很陌生 甚至在阅读之后 最新存档现已删除 http wiki apache org couchdb How to store hierarchical data 通过 将每个节点的完整路径存储为该节点文档中的属性 ht
  • 为什么从 Cassandra CLI 教程中进行剪切和粘贴不起作用?

    盲目跟风http wiki apache org cassandra Cas sandraCli http wiki apache org cassandra CassandraCli 有人可以解释一下吗 aaron mac apache
  • redis.exceptions.ConnectionError:连接到本地主机时出现错误-2:6379。名称或服务未知

    当我在服务器中运行代码时出现此错误 我的环境是 debian 并且Python2 7 3 Traceback most recent call last File fetcher py line 4 in
  • 将 SQLite 与经典 ASP 结合使用

    我正在构建一个 快速小 应用程序 它需要一个小型数据库 我想使用经典 ASP 即不是 ASP NET 并且我想知道 SQLite 用于数据库 可以使用 Classic ASP 中的 SQLite 吗 如何从 ASP 打开 创建 使用 SQL
  • Cassandra LWT 读取

    据我了解 LWT 插入始终以 SERIAL 一致性级别完成 如果为 true 这是否意味着读取作为 LWT 插入的行可以安全地以 ANY 一致性级别读取 换句话说 我假设 LWT 插入是完全一致的 使得任何后续读取也完全一致 无论一致性级别
  • Cassandra 安装问题

    按照以下步骤安装 apache cassandra 最新版本 第一次启动时 cassandra f 我得到这个 Exception in thread main java lang NoClassDefFoundError org apac
  • 应用程序内的 SQLite 文件版本兼容性

    我有一个 C NET 应用程序 一种复杂的计算应用程序 其中用户输入数据 处理后的信息使用 JSON 序列化和 EF 保存到 SQLite 文件中 需要时可以将其加载到我们的应用程序中 应用程序在开发过程中经历了很多变化 类也被修改 因此
  • SQLite - 左连接

    我需要进行这样的查询 SELECT table1 table2 column FROM table1 LEFT JOIN table2 ON table1 column table2 column 但这不起作用 如果我尝试相同的查询但替换第
  • 如何使用 cqlsh 将 Cassandra 连接到本地主机?

    我将 rpc port 设置为公共 IP 地址 现在我可以从外部服务器正常连接到 Cassandra 但是 我无法使用 cqlsh 从 Cassandra 服务器本身进行连接 我收到一个错误 即 Connection error Could
  • 在sqlite SQL语句中与order by子句结合使用limit

    下面的两条 SQL 语句总是会产生相同的结果集吗 1 SELECT FROM MyTable where Status 0 order by StartTime asc limit 10 2 SELECT FROM SELECT FROM
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Android - 在sqlite数据库中存储敏感数据

    我需要将敏感数据存储在 Android 应用程序的 sqlite 数据库中 我如何确定这些数据非常安全 我知道我可以使用密钥加密数据 但是我将该密钥存储在哪里 我也不想要求用户填写密钥 我只是希望它能够自行工作 因为我害怕逆向工程 所以我也
  • 如何使用 cradle (CouchDB) 将参数传递给视图

    Using cradle https github com cloudhead cradle 如何将参数传递给 CouchDB 中的视图 Update 假设我想返回与其他属性匹配的文档 key 默认 document format key
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra

随机推荐

  • Linux下Shell脚本实战之监测磁盘空间

    Linux下Shell脚本实战之监测磁盘空间 一 脚本目的及要求 二 脚本内容 三 运行脚本 一 脚本目的及要求 1 监控 home下每各个用户目录的占用磁盘大小 2 监控 var log下前10名占用磁盘大小 3 输出的磁盘空间报告文件加
  • 基于fpga的卷积神经网络verilog代码仿真源码

    基于fpga的卷积神经网络verilog代码仿真源码 一个up主讲解卷积神经网络verilog代码 直接逐句讲解verilog代码 搭配仿真工具讲解时序问题 以及在verilog代码中设计遇到问题 源码也是在评论下面给出来了 希望对大家有作
  • 阿里云创建专有网络网段192、172和10选择方法

    阿里云专有网络VPC私网网段可选192 168 0 0 16 172 16 0 0 12或10 0 0 0 8 如何选择 阿里云百科来详细说下阿里云专有网络IPv4网段选择方法 阿里云专有网络VPC网段选择 阿里云专有网络VPC网段可以使用
  • 第二十二章、 Model/View便利类树型部件QTreeWidget

    老猿Python博文目录 专栏 使用PyQt开发图形界面Python应用 老猿Python博客地址 一 引言 树部件 Tree Widget 是Qt Designer中 Item Widgets Item Based 部件中提供的一个Mod
  • 网络渗透测试——MAC泛洪攻击

    使用Kali虚拟机对eNSP模拟交换机进行MAC地址泛洪攻击 一 攻击效果 交换机向所有端口转发 泛洪 从而截取数据包 二 攻击原理 攻击者 kali虚拟机 向eNSP模拟的交换机发送大量不同Mac地址的无用的数据包 占满该交换机的MAC地
  • 【css】纯css实现图片发光效果

    html div class box h1 我是图片 h1 div css 初始化 取消页面元素的内外边距 padding 0 margin 0 body 弹性布局 让页面元素垂直 水平居中 display flex justify con
  • 配置Windows10虚拟机并使用VMware tools共享文件

    下载VMware workstation Download VMware Workstation Prohttps www vmware com products workstation pro workstation pro evalua
  • matlab 特征选择算法,特征选择、特征提取matlab算法实现(模式识别)

    提供了模式识别特征选择和特征提取详尽的matlab算法代码实现 6 特征选择 6 1 问题 对 threethreelarge m 数据 采用任意一种特征选择算法 选择2个特征 6 2 思路 采用简单特征选择法 simple feature
  • MySQL基本概念、PyMySQL操作及数据库事务操作

    目录 一 数据库概念及其分类 1 1数据库概念 1 2数据库分类 1 2 1关系型数据库 1 2 2 非关系型数据库 二 SQL Structured Query Lanaguage结构化查询语言 2 1SQL语言分类 2 2 SQL语句常
  • 学习记录(C语言)

    一 初识转义字符 转义字符有哪些 其中 表示打印一个单独的单引号或者双引号 n表示换行 t相当于tab键 ddd ddd表示1 3个八进制数字例如打印 130 八进制的130相当于十进制的88再对照ASCII码表88对应的符号为X 同理 x
  • Python网络爬虫原理及实践

    作者 京东物流 田禹 1 网络爬虫 网络爬虫 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 网络爬虫相关技术和框架繁多 针对场景的不同可以选择不同的网络爬虫技术 2 Scrapy框架 Python 2 1 Scrapy架构 2
  • windows 安装 yarn

    windows 安装 yarn 下载node js http nodejs cn download 通过 Chocolatey 安装 以管理员身份打开 cmd exe SystemRoot System32 WindowsPowerShel
  • 时间数组传到数据库

    1 数据库 有数据 想精确到时分秒 就写datatime 不想要就写data 2 vue页面 写一个数组 可以放 开始时间 结束时间 3 把dataRange数组的索引 0 赋给workTimeBegin 1 赋给workTimeEnd 这
  • 给exe添加管理员权限的几种方法&修改exe兼容性属性的方法

    有些程序我们必须以管理员权限才能运行 但是我们又不想 右键 gt 以管理员权限运行 那么我们就只有给exe增加管理员权限了 1 如果是vs编译的exe可以通过配置属性 项目 XXX 属性 配置属性 链接器 清单文件 然后重新编译 可以根据需
  • delphi .dfm文件汉字不显示_搞定Delphi模块化之Package

    Package的优点 应用程序可以被高度的模块化 而且可以逐渐交付完成的功能给客户 维护方便 可以只更新单一的模块功能 提升程序的载入速度 Package的缺点 有些情形下使用Package只能间接的方式取得资料 变量 类 Package
  • springboot项目上传文件过大导致java heap space 的问题解决方案(windows和linux)

    windows 点击项目 run as debug as Run Configuration Debug Configuration java application Arguments Xmx1024m Xms1024m XX NewRa
  • 万物云原生下的服务进化

    导读 在万物云原生下的环境下 Java的市场份额也因耗资源 启动慢等缺点 导致在云原生环境里被放大而降低 通过这篇文章 读者可以更好地了解如何在云原生环境下通过升级相关版本和使用GraalVM打出原生镜像到方式 优化Java应用的性能和资源
  • 【详细齐全】FIO使用方法 及参数解析(文章末尾)

    linux 使用FIO测试磁盘iops 方法详解 FIO是测试IOPS的非常好的工具 用来对硬件进行压力测试和验证 支持13种不同的I O引擎 包括 sync mmap libaio posixaio SG v3 splice null n
  • 安装fastdfs及java操作

    1 安装 libfastcommon git地址 https github com happyfish100 libfastcommon git 安装 git clone https github com happyfish100 libf
  • key-value数据库

    传统的文件系统中 需要维护目录的层次结构 使用dentry inode directory等复杂结构保存元数据的信息 而面对更多定制文件系统的需求 越来越多的系统考虑使用key value形式保存文件系统中的元数据信息 使用数据库来保存这些