文档章节

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

巴顿.太一
 巴顿.太一
发布于 2017/04/07 18:54
字数 1121
阅读 45
收藏 0
点赞 0
评论 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
博文 67
码字总数 75265
作品 0
海淀
技术主管
缓存架构设计

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

问题达人 ⋅ 2016/03/31 ⋅ 0

缓存架构设计

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

chris_2009 ⋅ 2016/03/29 ⋅ 0

招募有志青年

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

乒乓狂魔 ⋅ 2016/12/02 ⋅ 10

如何为微服务选择数据库

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

dev_csdn ⋅ 2017/11/14 ⋅ 0

koa session 的思考

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

anziguoer ⋅ 01/01 ⋅ 0

容器云落地的痛点

企业要用正确的姿态拥抱容器并且使用好容器,需要在应用容器技术之前考虑清楚以下九个关键问题: 企业容器云方案设计需要遵循什么原则?容器云技术产品如何选型?容器云的网络应该如何设计?...

baishuchao ⋅ 2017/12/22 ⋅ 0

Redis复制与可扩展集群搭建

edis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要...

袁跃平 ⋅ 2013/01/21 ⋅ 0

Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题

Redis复制流程概述 Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了 Redis的复制功能,就一定会有内存...

夕阳红树林 ⋅ 2012/06/18 ⋅ 1

揭秘Spark应用性能调优

引言:在多台机器上分布数据以及处理数据是Spark的核心能力,即我们所说的大规模的数据集处理。为了充分利用Spark特性,应该考虑一些调优技术。本文每一小节都是关于调优技术的,并给出了如何...

博文视点 ⋅ 2017/04/21 ⋅ 0

提高ActiveMQ工作性能(下)

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/51064242 目...

yunlielai ⋅ 04/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sbt网络问题解决方案

http://dblab.xmu.edu.cn/blog/maven-network-problem/

狐狸老侠 ⋅ 9分钟前 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 52分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 57分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部