内存是新的硬盘,硬盘是新的磁带
2019独角兽企业重金招聘Python工程师标准>>>
cassandra观止
作者:nosqlfan on 星期六, 四月 3, 2010 · 67条评论 【阅读:2,381 次】
cassandra是由facebook开发的一套NoSQL存储引擎,也是目前最火的NoSQL应用之一,目前twitter和digg中都有使用。当然,用得最多的还是facebook自己。
cassandra的特性不同的人理解不一样,归纳起来有如下几点:
分布式,集群下容错性高,无限水平扩展性
schema的灵活控制,随意增删字段
支持范围查询
基于gossip的p2p节点通信
充分利用硬盘高效的顺序读写
然而本文想要描述的是cassandra系统中包含的一些令人眼前一亮的技术实现上的思想。
1.硬盘是新的磁带
“内存是新的硬盘,硬盘是新的磁带”这是Jim Gray的一句名言。我们目前对硬盘(非SSD)的利用,多是随机读取,这时的硬盘读取速度是相当慢的,但是如果把硬盘当成磁带进行顺序读取的话,速度是相当惊人的。
而cassandra的设计恰恰是冲着这一点来的,他在内在中保存一定量的数据后再统一写入磁盘,这本身就是一次顺序写入,在写入后不再进行更改,这样在进行数据读取时,就可以只进行一次次的顺序读取即可。大大提高了磁盘的效率。
如果cassandra不更改数据,那数据的update操作又是如何实现的呢,cassandra采用的是追加方式,再写一条信息,取的时候取出对这个数据的所有操作再根据时间顺序进行案件重演就可以算出最新的数据是什么了。
2.bloom-filter算法的应用
bloom-filter算 法简单来说就是判断一个值是否存在于一个集合中的算法,用得最多的是在搜索引擎的URL抓取中,如果这个URL在一段时间抓取过的URL列表中,那就不再 进行抓取。这个算法的时间和空间复杂度都很小,基本每一个数据的判断只需要做几次hash就可以了,但是问题是有一定的误差,只要应用可接受这个误差,那 使用bloom-filter算法是最好的。
bloom-filter在cassandra用来判断一个数据块中是否有一个值的更新,上面说到,我们在读取数据时,是将其更新记录全部读取再通 过时间顺序排序得到最新值。而cassandra每次内存存储上限(这个可以自由设置,但为了保证效率,通常低于物理内存)到时都会将内在中的数据写入硬 盘,生成一个新的文件。于是在数据量很大时,会有很多个块生成,我们如果所有块都去查找是否有某一个值的更新记录,是会浪费时间降低效率的,于是 cassandra用bloom-filter算法来决定是否对这个块进行查找,cassandra中的index.db文件就是存储bloom- filter算法的hash表的。
我们上面也说过,bloom-filter算法会有一定误差,但是这个误差是可能会将不在一个集合中的值误判为在这个集合中,而不会将在这个集合中 的值误判为不在这个集合中,有点杀三千不放一个的意思。这个误差在这里是可以忍受的,因为我们可以多查一个不存在这个值的数据块,但是决不会漏掉任何一 个。
3.基于gossip的多点同步
gossip是 一个p2p协议的实现,他的原理是向周围的节点传递信息,直到所有节点都有同样的信息,这种传播是病毒式的。通过这种方式,可以达到多点同步,并且可以不 用关心具体节点量实现无限水平扩展的功能。而且多点分布式系统有很好的容错机制,集群中的一台或N台机器出问题,不会对整体数据服务的正确性造成影响。而 cassandra的错误侦测系统也能很快的发现坏死的结点以便及时处理。
and more….
本文只讲述了令作者受到启发的技术点,抛砖引玉,欢迎提出更多不同的见解。
附cassandra开发者pdf讲搞:cassandra_nosql
转载于:https://my.oschina.net/doctor2014/blog/411132
内存是新的硬盘,硬盘是新的磁带相关推荐
- 给昨天新买的惠普笔记本拆机加内存和换m.2硬盘
22年12月10日新鲜到手的惠普锐15锐龙版15.6寸轻薄本,由于出厂自带内存8G,m.2固态512G,正好碰上双十二就趁着买了两条16G的三星内存DDr4 3200MHz,凑够最高可支持32G内存, ...
- 新加硬盘但计算机里找不着,win10新加的硬盘为什么不显示_win10新加的硬盘不显示恢复方法-win7之家...
对于我们经常使用的win10电脑,许多用户都很担心自己电脑中内存的不足,因此就会选择给电脑添加一个新硬盘,然而有些用户在给win10系统添加新硬盘的时候却总是不显示出来,那么win10新加的硬盘为什么 ...
- 计算机能不能升级固态硬盘,不算很老的计算机升级,换一块MLC的固态硬盘吧,新电脑回来了!...
不算很老的计算机升级,换一块MLC的固态硬盘吧,新电脑回来了! 2018-07-10 19:56:27 12点赞 28收藏 28评论 Q:为什么要选择东芝QE200EX, A:虽然这款固态硬盘有很多吐 ...
- linux硬盘目录下,Linux 新添加的硬盘格式化并挂载到目录下
需求: 新增加一块硬盘sdb,将sdb分区,只分一个区,格式化,挂载到目录/ssd下. 1. 查看现在已有的分区状态 # df –l 图中显示,没有看到sdb硬盘 2. 查看服务器安装的硬盘状态( ...
- vmware添加新硬盘 挂载新硬盘 硬盘扩容
vmware添加新硬盘 挂载新硬盘 硬盘扩容 平时都用虚拟机做实验,做一些linux方面的开发应用,但是很烦人的是经常遇到预先装好的linux虚拟机的硬盘空间过小 现在好多软件都没法安装了.自己重新装 ...
- VirtualBox中虚拟Ubuntu添加新的虚拟硬盘
VirtualBox中装好Ubuntu后,发现硬盘空间不够使用 了.以下是搜集整理的解决办法: 1. 添加新硬盘 设置 -> Storage -> SATA控制器->右击,选择&qu ...
- 台式电脑计算机能创建新磁盘吗,解决方案:如何添加硬盘以扩展台式计算机上的存储空间|如何对新添加的硬盘进行分区...
如果是家用计算机,许会选择台式计算机.随着使用期间存储量的不断增加,计算机系统中的可用空间也越来越少.在这种情况下,您可以在计算机上添加硬盘以扩展系统的磁盘容量.下面介绍如何向桌面添加硬盘驱动器以 ...
- 计算机如何新增硬盘,电脑新增加一块硬盘安装并使用的教程
电脑新增加一块硬盘怎么安装使用?现在配置电脑主机,在存储这方面,主流推荐都会使用SSD硬盘,因为读写速度快,在SSD系统上安装系统,开机只需要10多秒,很在程序上提高了体验,但SSD成本较贵,一般都是 ...
- 每个计算机主机只有一个硬盘吗,电脑多加一个硬盘需要重装系统吗? 电脑如何新增加一块硬盘...
1.原来已有系统,现在加个硬盘,不需重做系统,只需要把硬盘接上去就是了.如果是IDE硬盘需要注意主从盘的设置,如果是SATA硬盘需要注意启动顺序.电脑新增加一块硬盘安装使用操作步骤如下: 2.将硬盘安 ...
- 硬盘备份到新电脑,你需要知道这个技巧
硬盘备份到新电脑,你需要知道这个技巧 前言 同一个机械硬盘之间拷贝 一台电脑内不同的两个机械硬盘之间拷贝 前言 大家好,这是我编写的第一篇原创文章,区区乃一不知名企业的一个普普通通的IT,编程基础在大 ...
最新文章
- wxWidgets:wxQueryLayoutInfoEvent类用法
- [PHP] 近期接手現有的企邮前端框架业务所遇困难
- mysql blob取值_MySQL 数据类型:
- Java面向对象之构造方法、构造方法重载
- form表单中的enctype=multipart/form-data什么意思?
- Java基础通信_Java网络通信基础编程(必看篇)
- ${pram.name}
- 【过关斩将】选择那些能产生复利效应的事情精进自己
- 平板电脑可以用手写的计算机软件,平板电脑可以当手写板(绘图板)用吗?
- MATLAB 2016b--神经网络工具箱中图形用户界面的使用
- webview防止跳转到浏览器
- 如何制定SEO文章发布模板?
- 阿拉伯文变形规范,阿拉伯语变形规则,阿拉伯文组合规则
- Vue响应式原理(defineProperty)
- 云服务器上部署仿牛客网项目
- Mysql单表、多表、SQL语句(DQL)
- 全国考研计算机成绩排名,全国33所计算机考研名校跨考难度系数排名
- 利用Java Swing技术设计一个Email邮箱地址注册的图形用户界面应用程序
- 洛咕 P3964 [TJOI2013]松鼠聚会
- 性能测试基础(一)性能测试分类