NoSQL:列族数据库
发布日期:2021-07-01 04:08:49
浏览次数:2
分类:技术文章
本文共 1258 字,大约阅读时间需要 4 分钟。
列族数据库可以存储关键字及其映射值,并且可以把值分成多个列族,让每个列族代表一张数据映射表(map of data)。
下表是关系型数据库Oracle和列族数据库Cassandra的术语对比:
Oracle | Cassandra |
---|---|
数据库实例(database instance) | 集群(cluster) |
数据库(database) | 键空间(keyspace) |
表(table) | 列族(column family) |
行(row) | 行(row) |
列(column,每行所对应的各列均相同) | 列(column,不同的行所对应的列可以有差别) |
什么是列族数据库
列族数据库将数据存储在列族中,而列族里的行则把许多列数据与本行的“行键”(row key)关联起来。列族用来把通常需要一并访问的相关数据分成组。例如,可能要同时访问多个客户的配置信息,但是很少需要同时访问他们的订单。
Cassandra是一种能快速执行跨集群写入操作并易于对此扩展的数据库。集群中没有主节点,其中每个节点均可以处理读取与写入请求。
列族数据库特性
Cassandra的每个键值对都存有一个“时间戳”值。令数据过期,解决写入冲突、处理陈旧数据等操作都会用到时间戳。若某列数据不再使用,则数据库可于稍后的“压缩阶段”(compaction phase)回收其所占空间。
- 一致性:开发者可以根据应用程序需要和业务需求,为每次读写操作指定数据库的“一致性”强度。
- 事务:仅支持行内的原子操作。写入操作首先会写在“提交日志”及“内存表”中,假如某节点故障,稍后可根据“提交日志”将数据变更恢复至该节点中。
- 可用性:因为集群中没有主节点,其中每个节点地位等同。减少操作请求的“一致性”级别,即可提升集群“可用性”。可使用“仲裁”来提高可用性。(参考:)
- 查询:由于没有丰富的查询语言,所以在设计其数据模型时,应该优化列与列族,以提升数据读取速度。在列族中插入数据后,每行中的数据都会按列名排序。加入某列的获取次数比其他列更频繁,那么应该将其值用作行键。
- 可扩展性:由于不存在主节点,所以向集群中新增节点即可改善其服务能力。
适用案例
- 事件记录。保存应用程序状态或运行中遇到的错误等事件信息。
- 内容管理系统与博客平台。可以使用列族存储博文的“标签”(tag)、“类别”(category)、“链接(link)”和“trackback”等属性。其评论信息既可以与上述内容放在同一行中,也可以移到另一个“键空间”。
- 计数器。可以用在网络应用程序中,通常要统计某页面的访问人数并对其分类,以算出分析数据。
- 限期使用。我们可能需要向用户提供试用版,或是在网站上将某个广告条显示一定时间。这些功能可以通过“带过期时限的列”(expiring column)来完成。这种列过了给定时限后,就会由Cassandra自动删除。
不适用案例
- 需要用ACID事务来执行写入及读取操作的系统。
- 想要让数据库根据查询结果来聚合数据,如求和或求平均值,那样需要把每一行的数据都读到客户端。
转载地址:https://mortal.blog.csdn.net/article/details/83064840 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月14日 01时35分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python自动化运维 - day14 - JavaScript基础
2019-05-02
oracle保存小数点前为"0"的问题
2019-05-02
linux sar 命令详解
2019-05-02
ipvsadm 安装配置
2019-05-02
Linux shell脚本的字符串截取
2019-05-02
数据库复习(4)
2019-05-02
1小时点击量破千万!阿里巴巴首发:MySQL高级调优笔记!全是技术重点
2019-05-02
这个GItHub上的Java项目开源了 2021最全的Java架构面试复习指南
2019-05-02
Proftpd MySQL [Step by Step]
2019-05-02
EFI Shell 命令参考
2019-05-02
HP-UX oracle RAC 双机实践
2019-05-02
解决SHELL脚本中的export无法生效的问题【转】
2019-05-02
linux中的sh脚本语法【转】
2019-05-02
区别数据结构中的堆栈与内存中的堆栈的个人总结【转】
2019-05-02
c++中冒号(:)和双冒号(::)的用法【转】
2019-05-02
python中各种下划线的含义
2019-05-02
《计算机视觉-一种现代方法(第2版)》读书笔记三:早期视觉(一幅图像)
2019-05-02
《计算机视觉-一种现代方法(第2版)》读书笔记六:应用之图像搜索和检索
2019-05-02