文档章节

如何选用持久化存储方案--一些需要考虑的问题

东皇巴顿
 东皇巴顿
发布于 2017/04/07 18:54
字数 1121
阅读 46
收藏 0

    以三种持久化存储方案为例:KahaDB、LevelDB、关系型数据库。其中KahaDB和LevelDB的工作原理基本类似,都采用内存+磁盘介质的方案:内存用于存放信息的位置索引,磁盘介质上存放消息内容。而关系型数据库的方案,通过JDBC对数据库进行操作完成消息的存储和修改。

    KahaDB基于文件系统,其次KahaDB支持事务。KahaDB主要元素包括:一个内存Metadata Cache用来在内存中检索消息的存储位置、若干用于记录消息内容的Data log文件、一个在磁盘上检索消息存储位置的Metadata Store、还有一个用于在系统异常关闭后恢复Btree结构的redo文件。

    LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库,由Google发起并开源。LevelDB只能由本操作系统的其他进程调用,所以它不具有网络性。如果您需要网络上的远程进程操作LevelDB,那么就要自行封装服务层。

    但我们在选择使用何种存储介质时,需要如网络上一些资料所说的那样,一定要对三种持久化存储方案的速度做比较后,选择最快的那种存储方案么?这里面至少有两个误区:

  1. 某种存储方案的速度一定比另一种存储方案的速度快。
  2. 一定要选择速度快的那种存储方案。

但是真正决定存储速度的因素,未必与软件的实现机制有绝对关系。我们详细的讨论一下:

  • 根据不同的硬件层配置,同一种持久化存储方案的性能是完全不一样的。例如在单节点计算的情况下,选用DDR 2133双通道内存组和DDR3 1333单通道内存条从理论上至少就可以多获得4Gbps的带宽;选用同样支持SATA3规范的机械硬盘和SSD固态硬盘,虽然两者理论上的对外速度都标称6Gbps,但是由于机械硬盘上单磁头的读写速度存在瓶颈,所以就算进行连续读操作,速度也只能达到200MB/s左右;但是固态硬盘的连续读速度却可以达到500MB/s左右(基本已经接近6Gbps)。

  • 如果是企业级硬件存储方案,那么速度差异还会继续扩大。例如电信行业经常采用的IBM 各个系列磁盘阵列,一般都会配置诸如RAID5这样的软存储方案。这样一来,同一份文件有多个副本,并且有多个磁头负责读写。磁盘阵列的对外输出一般会采用光纤通道(FC),而光纤通道行业协会(Fibre Channel Industry Association)最新推出的(2015年实施)Gen 6第6代光纤通道标准中,设计的对外传输理论速度是128Gbps。

  • 当然,除非您的公司/团队能够接受这些企业级存储方案高昂的费用。否则还是建议在生产环境搭建性价比较高的折中方案。例如采用20台左右PC Server搭建Ceph/MFS分布式存储系统。

    所以某种存储方案的性能,除了这种存储方案的工作原理以外对其有直接影响外,还要考虑它的工作环境。只有根据软件团队预估的系统压力、综合建设方案、考虑后续扩容方式,来确定采用哪一种存储方案,才是科学的。

    在同样的硬件资源条件下,相比KahaDB和LevelDB这样的“内存+存储介质”这样的持久化方案而言,使用关系型数据库作为持久化方案绝对不能说“性能”最好,但是在大多数情况下这个持久化方案也不会成为整个顶层架构的设计瓶颈(因为关系型数据库一般都有自己的热备和负载方案)。所以很多团队还是会使用这样的持久化方案,很大一部分原因就是这些团队对关系型数据库有更丰富的使用经验,且有专门的数据库管理人员。

© 著作权归作者所有

共有 人打赏支持
东皇巴顿
粉丝 3
博文 62
码字总数 73311
作品 0
海淀
技术主管
私信 提问
缓存架构设计

缓存使用场景   缓存是提高应用程序性能的最常见的一种技术,常适用于读多写少的场景。按照架构层次可以分为:客户端缓存、页面缓存、应用缓存、持久层缓存。   其中应用缓存设计最为复杂...

问题达人
2016/03/31
184
0
缓存架构设计

缓存使用场景   缓存是提高应用程序性能的最常见的一种技术,常适用于读多写少的场景。按照架构层次可以分为:客户端缓存、页面缓存、应用缓存、持久层缓存。   其中应用缓存设计最为复杂...

chris_2009
2016/03/29
123
0
如何为微服务选择数据库

原文:How to choose a database for your microservices 作者:Jeff Carpenter, InfoWorld 译者:Jackyrong 你的微服务架构需要多种数据模型。你是应该选择混合持久化呢还是多模型数据库? ...

dev_csdn
2017/11/14
0
0
招募有志青年

0 初衷 现在有很多的技术交流群,很多的群都是这样的: - 1 经常扯淡- 2 很多伸手党- 3 一些道听途说的结论都拿来作为自己的观点- 4 技术交流的深度不够 花费了很多时间在群上,但是收获缺并...

乒乓狂魔
2016/12/02
1K
10
koa session 的思考

koa session 的思考 session 是什么? cookie 是什么? cookie 和session 的关系是 ? 如何识别是那个用户登录的 ? 用户登录系统, 系统生成cookie,浏览器获取到http 的响应, 则会在客户端保存c...

anziguoer
01/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

0020-使用JDBC向Kudu表插入中文字符-双引号的秘密

1.问题描述 使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文字符串被截断。 2.问题复现 测试环境: CDH5.12.0 Kudu1.4.0 ImpalaJDBC41_2.5.35 1.使用ImpalaJDBC代码进行...

Hadoop实操
6分钟前
0
0
配置防盗链、访问控制Directory、访问控制FilesMatch

11月19日任务 11.25 配置防盗链 11.26 访问控制Directory 11.27 访问控制FilesMatch 一.配置防盗链 通过限制referer来实现防盗链的功能 配置文件增加如下内容 <Directory /data/wwwroot/www...

hhpuppy
7分钟前
1
0
Java内存管理 -JVM 垃圾回收

一.概述 相比起C和C++的自己回收内存,JAVA要方便得多,因为JVM会为我们自动分配内存以及回收内存。 在之前的JVM 之内存管理 中,我们介绍了JVM内存管理的几个区域,其中程序计数器以及虚拟机...

终日而思一
9分钟前
0
0
Nginx 服务器之速率限制

Nginx服务器有一个非常有用的限速功能,但是它却常常被错误配置。 这个功能用来限制用户在某此时间段内请求的的HTTP请求数,此请求应该是 GET 或POST 来发出的请求。 这个限速功能常常被应用...

架构师springboot
20分钟前
0
0
锁和分布式锁

锁的由来 : 多线程环境中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,这就需要某种机制来保证只有满足某个条件(获取锁成功)的线程才能访问资源...

微笑向暖wx
23分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部