NoSQL:列族数据库

列族数据库可以存储关键字及其映射值,并且可以把值分成多个列族,让每个列族代表一张数据映射表(map of data)。

下表是关系型数据库Oracle和列族数据库Cassandra的术语对比:

OracleCassandra
数据库实例(database instance)集群(cluster)
数据库(database)键空间(keyspace)
表(table)列族(column family)
行(row)行(row)
列(column,每行所对应的各列均相同)列(column,不同的行所对应的列可以有差别)

什么是列族数据库

列族数据库将数据存储在列族中,而列族里的行则把许多列数据与本行的“行键”(row key)关联起来。列族用来把通常需要一并访问的相关数据分成组。例如,可能要同时访问多个客户的配置信息,但是很少需要同时访问他们的订单。

Cassandra是一种能快速执行跨集群写入操作并易于对此扩展的数据库。集群中没有主节点,其中每个节点均可以处理读取与写入请求。


列族数据库特性

Cassandra的每个键值对都存有一个“时间戳”值。令数据过期,解决写入冲突、处理陈旧数据等操作都会用到时间戳。若某列数据不再使用,则数据库可于稍后的“压缩阶段”(compaction phase)回收其所占空间。

  • 一致性:开发者可以根据应用程序需要和业务需求,为每次读写操作指定数据库的“一致性”强度。
  • 事务:仅支持行内的原子操作。写入操作首先会写在“提交日志”及“内存表”中,假如某节点故障,稍后可根据“提交日志”将数据变更恢复至该节点中。
  • 可用性:因为集群中没有主节点,其中每个节点地位等同。减少操作请求的“一致性”级别,即可提升集群“可用性”。可使用“仲裁”来提高可用性。(参考:NosQL分布式模型:仲裁
  • 查询:由于没有丰富的查询语言,所以在设计其数据模型时,应该优化列与列族,以提升数据读取速度。在列族中插入数据后,每行中的数据都会按列名排序。加入某列的获取次数比其他列更频繁,那么应该将其值用作行键。
  • 可扩展性:由于不存在主节点,所以向集群中新增节点即可改善其服务能力。

适用案例

  • 事件记录。保存应用程序状态或运行中遇到的错误等事件信息。
  • 内容管理系统与博客平台。可以使用列族存储博文的“标签”(tag)、“类别”(category)、“链接(link)”和“trackback”等属性。其评论信息既可以与上述内容放在同一行中,也可以移到另一个“键空间”。
  • 计数器。可以用在网络应用程序中,通常要统计某页面的访问人数并对其分类,以算出分析数据。
  • 限期使用。我们可能需要向用户提供试用版,或是在网站上将某个广告条显示一定时间。这些功能可以通过“带过期时限的列”(expiring column)来完成。这种列过了给定时限后,就会由Cassandra自动删除。

不适用案例

  • 需要用ACID事务来执行写入及读取操作的系统。
  • 想要让数据库根据查询结果来聚合数据,如求和或求平均值,那样需要把每一行的数据都读到客户端。

想了解更多关于NoSQL数据库:NoSQL数据库专栏

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页