cassandra的设计思考


timestamp must be consistent across the application otherwise earlier changes may overwrite newer ones.

--------

Column is immutable, which prevents all kinds of confusion in a multithreaded environment.

-----------

为何设计column family?
与现实应用的分类相呼应,方便管理数据。
[bigtable:
column families, which form the basic unit of access control.
All data stored in a column family is usually of the same type (we
compress data in the same column family together). 压缩数据以减少磁盘io时间。
Access control and both disk and memory accounting are performed at the column-family level.
]

-----------

column family和row对应(可以多对一),根据row的key属性排序

Related columns, those that you'll access together, should be kept within the same column family.

similar to the way you create tables in an RDBMS

------------------------

A row in a regular column family is basically a sorted map of column names to column values;(已排序的)

为何要有row的概念?

key/value中:key即为row中的key,value即为row的value。Row的value可以包含多个ColumnFamily
bigtable基于row的key排序

-----------

通常一个keyspace存储一个应用的数据。

For each keyspace there are one or more column families.

similar to how you create databases on an RDBMS server

-----------------

Cassandra不像数据库,不能在查询的时候指定排序规则,排序在数据存入时便完成了,并且始终保持在这个已排序的状态。

-------------

因为SSTable数据不可更新,可能导致同一个Column Family的数据存储在多个SSTable中,

这时查询数据时,需要去合并读取Column Family所有的SSTable和Memtable,这样到一个Column Family的数量很大的时候,

可能导致查询效率严重下降。因此需要有一种机制能快速定位查询的Key落在哪些SSTable中,而不需要去读取合并所有的SSTable。

Cassandra采用的是Bloom Filter算法,通过多个hash函数将key映射到一个位图中,来快速判断这个key属于哪个SSTable。

根据SSTableWriter.java看,一个SSTableWriter一个BloomFilter

每个SSTable都有一个BloomFilter,记录哪些key存在了这个SSTable中
-----------------
何时用:
Twitter 和 Digg 对数据存储引擎的需求相当独特: 写操作密集,基本无修改需求,读操作则多数是分散多次读取汇总展示

你可能感兴趣的:(算法,Access,twitter,cassandra)