- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在研究 Cassandra 并试图了解其架构,并且我正在阅读 wiki 中的以下页面: http://wiki.apache.org/cassandra/MemtableSSTable
因此,为了遵循这里的工作流程,您发送一个更新表的请求,该请求被写入 CommitLog,然后写入称为 Memtable 的内存表(如果系统出现问题,可以从 Commitlog 重建该表)失败)。一旦 Memtable 达到一定大小,它会将整个 Memtable 刷新到磁盘上的 SSTable,该 SSTable 无法再修改,只能在压缩期间合并。当您达到可配置数量的 SSTable 时,您将进行压缩,这基本上会合并结果,释放磁盘空间并创建一个新的和改进的最新 SSTable。如果我理解有任何错误,请纠正我。
现在我有一些关于压缩的问题。首先,这个手术的费用是多少?如果每当光盘上有两个 SSTable 时我就要求进行压缩,这是否会令人望而却步,或者等到半夜使用量下降时我会得到更好的服务吗?如果我有多个(但很小)SSTable 与有几个但非常大的 SSTable 相比,压缩会更好吗?拥有大量未压缩的 SSTable 是否会影响读取性能?并发如何处理:如果我正在从这些 SSTable 中读取数据,然后有人执行插入操作,将新的 Memtable 刷新到磁盘,进而导致压缩,该怎么办?
您可以提供有关此的任何信息和经验,那就太好了!
最佳答案
尝试回答每个问题:
Firstly, how expensive is this operation?
压缩必须复制它正在压缩的 SSTable 中的所有内容(减去来自逻辑删除或覆盖的任何消灭)。然而,这比一开始看起来要便宜,因为压缩使用纯粹的顺序 IO,这在旋转磁盘上又好又快。
If I demanded a compaction whenever we have two SSTables on disc, would this be prohibitive, or would I be better served waiting until the middle of the night when usage is down?
这意味着您的写入成本将显着增加;假设每次写入都会导致一个新的 SSTable;因此,每次写入都必须压缩之前的所有写入。编写 N 个项目的成本将为 N^2。
一个更好的想法是采用类似于 Acunu 的倍增数组所使用的压缩策略:将每个 SSTable(又名数组)存储在一个“级别”中,并在一个级别中有两个数组时压缩它们,将输出数组提升为下一级。这可以证明每次写入分摊为 O((log N)/B) 顺序 IO,同时将数组数量限制为 O(log N)。
该方案在Cassandra 的(开源)存储引擎CaSTLe 中实现。欲了解更多信息,请参见此处:
注意,我为 Acunu 工作
Is compaction any better if I have multiple (but small) SSTables vs having a few but very large SSTables?
使用较小的 SSTable 进行压缩将花费更少的时间,但您必须执行更多操作。确实,这是以马换类(class)。然而,SSTable 的数量和大小确实会影响读取性能(请参阅下一个问题)
Does having a lot of non-compacted SSTables affect read performance?
对于点读取,不是很多:Cassandra(和 CaSTLe)具有布隆过滤器,以避免在知道键不存在时查找 SSTables,并且可以在找到正确的值时提前终止(通过使用时间戳)关于值和 SSTables)。
但是,使用 get_slice 查询时,您无法提前终止,因此您必须访问行中可能包含值的每个 SSTable - 因此,如果您有很多查询,您的 get_slices 将会变慢。
对于 get_range_slices 来说情况更糟,你不能使用布隆过滤器,并且每次调用都必须访问每个 SSTable。这些调用的性能将与您拥有的 SSTable 数量成反比。
更重要的是,对于数千个 SSTable,布隆过滤器误报率 (~1%) 将开始受到影响,因为每次查找时,您都必须在 10 个不包含该值的 SSTable 中查找!
How does concurrency work with this: what if I'm reading from these SSTables, then someone does an insert which flushes a new Memtable to disk, which in turn causes a compaction?
在 Cassandra 中,一旦内存中不再有对 SSTable 的引用(由垃圾收集器决定),SSTable 就会从磁盘中删除。所以读取不需要担心,旧的 SSTable 会被懒惰地清除。
谢谢
汤姆
关于nosql - Cassandra SSTable 和压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8917882/
在大规模数据集(Google,Facebook,linkedin)中使用非关系数据库(例如键值对存储)的好处显而易见。您认为中小型应用程序如何从使用非关系数据库中受益? 最佳答案 自60年代以来,IB
我正在努力弄清楚如何最好地为我的系统实现这一点……现在让我的头离开 RDBMS 空间…… 我当前数据库的一部分有三个表:Show、ShowEntry 和 Entry。 ShowEntry 基本上是 S
我计划使用 nosql 数据库作为我的 Web 产品的后端。我有几个非常基本的疑问。 1) 我在博客中读到 Nosql 数据库对于在线货币交易不太好,即数据完整性是最重要的。(我的产品有在线货币交易)
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 去年关闭。 Improve th
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
NoSQL 术语有 4 个类别。 键\值存储 面向文档 图 面向列。 从我的角度来看,所有这些数据建模都有相同的定义,有什么区别? Key\value 数据库以类似 OOP 中的对象的结构维护数据。访
我正在做一个小项目,我需要构建一个倒排索引并应用基于用户查询的相似性算法 - 基本信息检索。构建和搜索倒排索引的最佳 NoSQL 产品是什么? 谢谢,J 最佳答案 由于倒排索引是关于存储单词与其在文档
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
当使用SQL数据库时,有不同的方式来显示系统的流程。在银行中,您可以使用 ER 来显示其属性。并为其操作使用类图 UML。 有什么更好的方法可以为最终用户表示 NoSQL 数据库,如果有任何图表我可以
关系数据库使用键来完成,并且发生在 (a 非常令人放心的 ) 数据级别。文档数据库必须在应用程序级别强制执行。 RDB 确实强制执行参照完整性。如果两个人之间的关系,如果一个人被删除,关系将自动不复存
我目前正在尝试实现类似 Tumblr 的用户交互,例如转发、关注、关注者、评论、我当前关注的人的博客文章等。 还需要显示每篇博客文章的事件。 我坚持为数据库创建适当的架构。有几种方法可以实现这种功能(
我一直在对 Nosql(尤其是 RavenDB)进行一些研究,但我仍然不确定处理以下问题的最佳方法: 我有两个简单的对象,“用户”和“事件”。一个用户可以输入多个事件,一个事件可以由多个用户输入——标
刚刚看到这篇关于 NOSQL 模式的文章(不是我的)。从开发人员的角度来看,它涵盖了许多 NOSQL 实现模式(如散列和复制模式)。 总而言之,如果有人问自己这个问题,它非常有用: Where can
我现在在网上听到了很多关于 nosql 键/值数据库的信息。你能举个例子说明一个是做什么用的。什么样的真实世界数据最适合这类数据库? 最佳答案 我认为'What the heck are you ac
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我目前正在从事一个项目,其中包括出于性能原因将内容推荐器从 MySQL 迁移到 NoSQL 数据库。我们的团队一直在评估一些替代方案,例如 MongoDB、CouchDB、HBase 和 Cassan
我们正在为即将到来的项目评估 NoSQL。我倾向于以 RDBMS 的方式思考问题,并且在概念化缺乏规范化方面遇到了困难。 我知道在 NoSQL 中复制数据不被认为是错误的。我无法理解的是修复数据更改以
有人建议我研究键/值对数据系统来替换我一直在使用的关系数据库。 我不太了解的是这如何提高查询效率。据我了解,您将丢弃大量有助于提高查询效率的信息,只需将您的结构数据库变成一个长长的键和值列表? 我完全
我正在尝试找出 NoSQL KVP 或文档数据库中外键和索引的等效项。由于没有数据透视表(用于添加标记两个对象之间关系的键),我真的很困惑如何以对普通网页有用的方式检索数据。 假设我有一个用户,该用户
我打算开始学习 NoSQL。我是从《Professional NoSQL》这本书开始的。书中有使用 CouchDB、Cassandra、MongoDB 等的示例。我的疑问是我应该安装所有不同的风格来完
我是一名优秀的程序员,十分优秀!