小编J B*_*amy的帖子

Cassandra SSTables和压实

所以我正在研究Cassandra并试图了解这个架构,我正在从wiki阅读以下页面:http: //wiki.apache.org/cassandra/MemtableSSTable

因此,为了遵循此处的工作流程,您发送更新表的请求,将此请求写入CommitLog,然后写入名为Memtable的内存表(在系统出现故障时可以从Commitlog重建).一旦Memtable达到一定的大小,它就会将整个Memtable刷新到光盘上的SSTable,它不能再被修改,只能在压缩过程中合并.当您达到可配置数量的SSTable时,您会进行压缩,这基本上会合并结果,释放磁盘空间并创建一个新的和改进的最新SSTable.如果我在这里理解错了,请纠正我.

现在我有一些关于压实的问题.首先,这项操作有多贵?如果我在光盘上有两个SSTables时要求压缩,这是否会令人望而却步,或者我会更好地服务,直到半夜使用率下降?如果我有多个(但很小的)SSTables与一些但是非常大的SSTables,压缩会更好吗?是否有很多非压缩的SSTable会影响读取性能?并发如何与此协同工作:如果我从这些SSTable中读取,那么有人会执行一个插入操作,将新的Memtable刷新到磁盘,从而导致压缩?

您可以提供的任何关于此的信息和经验都会很棒!

cassandra nosql

7
推荐指数
1
解决办法
7577
查看次数

数据记录分层

所以我试图理解Datalog是如何工作的,它和Prolog之间的区别之一是它对否定和递归有分层限制.引用维基百科:

如果谓词P是从谓词Q中积极推导出来的(即,P是规则的头部,并且Q在同一规则的正文中是正的),那么P的分层数必须大于或等于分层Q的数量

如果谓词P来自否定谓词Q(即,P是规则的头部,并且Q在同一规则的主体中出现负面),那么P的分层数必须大于Q的分层数. ,

因此,通过这样,下面的两个谓词不会导致分层错误,因为它们可以简单地分配相同的分层数.所以这些谓词很好,尽管有圆形定义.

  1. A(x): - B(x)
  2. B(x): - A(x)

但是如果我们有一个含有一些否定的定义(其中〜是否定),则会发生什么

  1. A(x): - ~B(x)
  2. B(x): - ~A(x)

这里的分层是不可能的.A(x,y)必须具有大于B(x,y)的分层数,并且B(x,y)必须具有大于A(x,y)的分层数.我的第一个想法是,这不是正常的,因为这是一个循环定义,但只要谓词不被否定,分层就可以完成循环.但为什么?真值是简单的二元值.以这种方式处理具有不同符号的公式似乎是极其随意的.在第二种不是第一种情况的情况下,这种分层试图阻止的是什么?

logic prolog datalog

6
推荐指数
1
解决办法
2466
查看次数

标签 统计

cassandra ×1

datalog ×1

logic ×1

nosql ×1

prolog ×1