新一代Apache Cassandra索引现已在Astra和DataStax Enterprise 6.8.3中正式开放使用 (general availability or GA),很快您也将在开源版的Apache Cassandra中看到这项全新功能。


01 SAI简介

DataStax非常高兴地宣布——具有高伸缩性且可以全局分布的存储附带索引(Storage-Attached Indexing or SAI),现已在Astra和DataStax Enterprise(DSE)中正式面世。

开发者可以在Apache Cassandra中使用关系型WHERE的模式,从而充分利用用户期望的数据库索引功能。相比Cassandra现行的索引或外部扩展的搜索方案,SAI赋予架构师高效且更简单的过滤筛选能力。另外,SAI解决了Cassandra用户面临的数据建模、查询灵活性以及运维方面的挑战。

为了更好地解释这些,我们借助一个例子来进一步说明。假设有一个简单的表,它的结构如下。

CREATE TABLE products (
id int,
time date,
name text,
price int,
PRIMARY KEY (id), time
);

下面这个SELECT示例查询语句在SAI问世之前是不可用的,因为其中没有引用任何主键。

SELECT name, price
FROM products
WHERE price < 30

现在有了SAI,上面的查询语句不仅可以使用,而且在数据规模很大时依然高速。

关键且现代的应用程序具有突破性的置信度、伸缩性、可用性以及性能。正在构建这些应用程序的开发者和架构师们选择使用Cassandra,因为其伸缩能力在任何负载下都能横跨裸机、多云、混合环境以及其它任何介于这三者之间的环境。只用写一次代码就可以大规模部署并实现自动化运维,这种灵活性改变了代码驱动的伸缩性的相关成本。

即使Cassandra很擅长注入数据,它严格的查询模式对习惯于关系型数据库的开发者来说仍有限制,这导致了开发周期的延长和市场交付时间的延迟。但这种情况不再会出现,因为SAI使Apache Cassandra具有了全局索引的能力。

操作员和数据库管理员对于支持在Cassandra上运行的至关重要的应用程序很有信心,因为Cassandra不仅没有宕机时间,而且用来维护正常运行以及性能服务级别协议(SLAs)的时间也更少。有了SAI,操作员无需过多担忧与伸缩、备份和修复相关的运维。因为相比之前的补充索引,SAI这种解决方案使这些运维过程更合理化也更简单。


02 SAI使用说明

DataStax不仅已经在Astra和DSE 6.8.3中开放使用SAI,同时还提交了Apache CEP(Cassandra Enhancement Proposals,即Cassandra改进提案)以便用户可以在开源的Apache Cassandra版本中用到此项功能。

下面是已经开放使用的SAI版本所支持的功能。


03 现在开始体验吧

存储附带索引非常容易上手。

假设有一个这样的表——

CREATE TABLE products (
id int,
time date,
name text,
price int,
PRIMARY KEY (id), time
);

如何定义SAI索引?在创建完数据库、键空间(keyspace)以及一个或多个表后,使用下面的DDL(Data Definition Language,即数据定义语言)命令语句在你希望索引的表格上定义一个或多个SAI索引。

CREATE CUSTOM INDEX ... USING 'StorageAttachedIndex'

一旦索引创建完成,接下来就只剩书写查询语句和指定索引字段的步骤了。就是这么简单!

下图中可以看到具体的查询示例代码。

在系统内部,这个索引已经根据所选列的数据类型进行了优化。比如,数字类型的字段为区间查询做了优化。系统会选择正确的索引执行方式,所以你无需考虑这些。

想要了解更多?点击下面的链接,跟随SAI文档中的初学教程来学习使用这个超棒的新索引。快速上手SAI


04 SAI的设计

存储附带索引的构建基于两部分:一是现行的Cassandra索引的最佳实践;二是常见的扩展分布式索引及搜索解决方案中最佳的分布式索引算法。

SAI与Apache Cassandra的存储引擎深度集成,这也正是为什么我们称之为“存储附带索引”。

SAI并不是抽象的索引表,随着数据的写入,它将Cassandra内存中的Memtable和磁盘上的SSTable这两个数据结构都编入索引。在读取时,SAI可以过滤筛选内存中和磁盘上的多种数据结构,智能地返回结果。

SAI几乎没有增加核心数据库运维的复杂性。从快照创建到模式(schema)管理再到数据过期,SAI与核心数据库的性能和机制紧密集成。

存储附带索引还与零拷贝串流完全兼容。这意味着当你增加或删除节点时,存储附带索引会与SStables完整同步。这样你就无需将这些索引序列化,也无需在接收节点的一端重建索引。

SAI并不需要引入任何特别的配置或“神奇的”设置来实现高性能,标准的Cassandra调校技巧依然适用。

比如,如果你有严格的读取延迟要求,调整压实操作(compaction)参数就很重要——因为你会想要确保Cassandra持续进行压实,从而让SSTable的数量保持在低点。这些用于调整无索引表的压实过程的方法,同样适用于那些使用了SAI的表。


05 总体拥有成本(TCO)

SAI所需的磁盘使用量远远低于其它Cassandra原生或扩展的索引解决方案。下图分别展示了SAI、Cassandra SASI和二级索引的磁盘占用空间。

与SASI不同,SAI不会为每个索引词(term)都创建ngram,所以能节省大量的磁盘空间。与二级索引相比,SAI无需复制整张表来添加新的分区键。


06 SAI的性能

在初步测试中,我们已经看到SAI相较于其他Cassandra原生索引方案,在数据的更新(增、改、删)方面有着极大的性能提升。大致来说,使用者可以期待SAI比二级索引多出大约40%的吞吐量并减少230%的延迟时间。在读操作方面,SAI比二级索引略快一些。

相比Cassandra其它的索引方案,使用SAI将会为你带来更多的功能和更高的性能。


07 我们的下一步计划

我们非常努力地奠定了SAI的基础,现在我们将集中开发新功能。在接下来的几个月里,我们将优先做以下两件事:

  1. 通过CEP(Cassandra改进提案)流程,使SAI加入到开源的Apache Cassandra版本中
  2. 研发全局排序、分词、地理数据支持等功能,继续拓宽Cassandra索引的边界

08 我们一直在这里

存储附带索引是DataStax工程团队酷爱的项目,我们以解决Cassandra用户在数据建模、运维和查询灵活性方面遇到的挑战为使命。

根据查询语句来设计表的结构是一项Cassandra通用的最佳实践,但是它带了来许多数据的冗余和开发者的疑惑。而SAI可以让用户根据表中的任意字段筛选数据,这意味着用户不再需要迎合查询语句来建构表——你只需简单地以最自然的方式创建表,并使用SAI索引字段灵活地查询数据且不受主键的任何限制。

针对多种分布式索引引擎的经年累月的研发,加上数年来通过解决最复杂的分布式数据的问题所积累的知识,DataStax已经通过SAI这个新的分布式索引解决了从Cassandra中灵活读取数据的挑战。

我们希望您同我们一样喜欢SAI。如果您有任何问题或反馈,请通过下方邮件直接与我们联系:

product.feedback@datastax.com

我们的工程团队随时准备着,非常乐意提供帮助、听取反馈以及开展对话。

Cassandra存储附带索引(SAI)全新上线的更多相关文章

  1. 为什么选择b+树作为存储引擎索引结构

    为什么选择b+树作为存储引擎索引结构 在数据库或者存储的世界里,存储引擎的角色一直处于核心位置.往简单了说,存储引擎主要负责数据如何读写.往复杂了说,怎么快速.高效的完成数据的读写,一直是存储引擎要解 ...

  2. SQL Server 2014新特性探秘(3)-可更新列存储聚集索引

    简介      列存储索引其实在在SQL Server 2012中就已经存在,但SQL Server 2012中只允许建立非聚集列索引,这意味着列索引是在原有的行存储索引之上的引用了底层的数据,因此会 ...

  3. 大数据架构-使用HBase和Solr将存储与索引放在不同的机器上

    大数据架构-使用HBase和Solr将存储与索引放在不同的机器上 摘要:HBase可以通过协处理器Coprocessor的方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增.删.改索 ...

  4. python实现简易数据库之一——存储和索引建立

    最近没事做了一个数据库project,要求实现一个简单的数据库,能满足几个特定的查询,这里主要介绍一下我们的实现过程,代码放在过ithub,可参看这里.都说python的运行速度很慢,但因为时间比较急 ...

  5. 又拍云SSL证书全新上线,提供一站式HTTPS安全解决方案

    互联网快速发展,云服务早已融入每一个人的日常生活,而互联网安全与互联网的发展息息相关,这其中涉及到信息的保密性.完整性.可用性.真实性和可控性.又拍云上线了与多家国际顶级 CA 机构合作的数款OV & ...

  6. 黑洞版视频裂变程序【接口版】全新上线,全新UI,支持分享数据统计

    黑洞版视频裂变程序[接口版]全新上线,全新UI,支持分享数据统计!   后台效果   程序统一售价:1899/套(包安装,包更新) 注:本程序不属于之前视频程序的更新版,展现形式和广告位设置均不同,是 ...

  7. 网易云安全DDoS高防全新上线 ,游戏防护实力领先

    本文由  网易云发布.       10月24日,网易云安全(易盾)正式上线DDoS高防解决方案[点击查看].基于网易20年网络安全防护经验,网易云安全(易盾)DDoS高防可提供1T超大防护带宽,拥有 ...

  8. mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)

    MongoDB是面向文档的数据库管理系统DBMS(显然mongodb不是oracle那样的RDBMS,而仅仅是DBMS). 想想一下MySQL中没有任何关系型数据库的表,而由JSON类型的对象组成数据 ...

  9. 拥抱自动化,CODING 2.0 持续集成全新上线

    在文章开始前,做一个小调查,在您的软件项目中集成一行新代码平均需要花多长时间? 15 分钟 一小时 半天 一天及以上 注意这里的集成是指将源码放在一起,并验证源码可以作为一个一致.运行可靠的软件的过程 ...

随机推荐

  1. react基础准备知识

    1.模块化:将重复的(可复用的)代码抽离为单个模块 2.组件化:将重复的 (可复用的) 的前端页面元素抽离单个组件 * Vue中实现组件化:1.Vue.component() 2.Vue.extend ...

  2. sql优化整理(一)

    sql的编写语法是这样的: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN < ...

  3. Java基础之字面值

    概要:什么是字面值 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值.比如在a = b * 2这个语句中,2就是一个字面值,它本身就是一个具体的值. 在Java源代码中,字面值用 ...

  4. AWS Lambda 借助 Serverless Framework,迅速起飞

    前言 微服务架构有别于传统的单体式应用方案,我们可将单体应用拆分成多个核心功能.每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作时不会互相影响 这种设计理念被进一步应用,就变成了无 ...

  5. Hadoop高可用

    一.原因 - NameNode是HDFS的黑心配置HDFS有事hadoop的核心组件 NameNode 在Hadoop及群众至关重要 - NameNode的宕机导致集群的不可用 二.解决方案 其中 N ...

  6. 动态规划之KMP字符匹配算法

    KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂. 很多读者抱怨 KMP 算法无法理解,这很正常,想到大学教材上关于 KMP 算法的讲解 ...

  7. Ubuntu18.04上安装NS-3

    目录 第一步:处理gcc/g++版本 第二步:安装相关依赖 第三步:正式安装 第四步:测试 我自己前后安装过好几次NS3了,网上其他相关的博客质量都不是很好,因此自己总结了一个ns3的安装过程. 首先 ...

  8. Python UnboundLocalError: local variable 'xxx' referenced before assignment 解决方法

    一.报错含义: val=9 def test(): print(val) val = 6 print(val) test() 翻译:本地变量xxx引用前没有定义. 二.报错原因 这是Python变量作 ...

  9. spring cloud feign 添加headers

    原文地址: https://www.jianshu.com/p/dfec934b737f 很多时候我们需要feign的时候添加headers 1.把当前登录用户的token传到下一个服务 2.在自己的 ...

  10. Maven依赖管理系统

    [背景] 之前在领英上读到一篇软文,<Managing Software Dependency at Scale>,讲述了领英是如何处理模块之间的依赖解析,以及如何去更好的处理依赖关系以及 ...