文档章节

索引大数据:分布式数据库中的全局索引与本地索引

effto
 effto
发布于 2016/05/20 17:30
字数 1107
阅读 231
收藏 5

毫无疑问,大数据的索引和查询是相当具有挑战性的。大数据的特点以高速、价值、多样和大量!100KS更新每秒的速度和TBs的数据扫描,让你不能这样做实时,除非你有坚实的索引!想象一下这些应用程序:

  • 旅游应用程序,能让你看到所有航班和酒店的定价和记录!
  • 在线游戏,能显示顶级球员的准确记分牌!
  • 欺诈检测应用程序,需要看你最近的动态来决定进行信用卡交易是否合法!

这些都是使用情况的查询,需要处理高摄取数据,但不能妥协毫秒的响应时间!如果你不能提供旅游路线、记分牌,或应对实时的诈骗行为,所有的都会关闭!好吧,这听起来好像不太可能,并且你会问:“如何索引和查询这类型的实时数据呢?

全局索引和本地索引

分布式系统提供两种类型的索引模型:

  • 本地索引:在集群中,每个节点索引的数据在本地上进行。这为快速索引进行了优化。然而随着数据摄取的增加,本地索引维护与传入的工作量,以及集群变大(节点)分散收集的点击查询延迟。想象一下这个查询:“找到8月份十大最活跃用户”
#SQL would look something like this

SELECT customer_name, total_logins.jan_2015 

FROM customer_bucket 

WHERE type=“customer_profile” 

ORDER BY total_logins.jan_2015 DESC 

LIMIT 10;

#index for the query would look something like this

INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) 

WHERE type=“customer_profile”;

这里是在与本地索引群集上执行查询的步骤:

  1. 没有一个节点知道答案!因此,分散是需要找出“前10名”在本地的每个节点上使用的本地索引。
  2. 收集获得“前10名”返回到协调节点。  
  3. 最后一步是重新排序,找出真正的前10的活跃用户,结合所有节点的结果,并将结果发送回客户端。

我们假设这样做超过100节点,你添加了第101个节点!没有获得更快的执行此查询。每个节点仍然做同样的工作,包括新节点。事实上,损害了101节点查询的延迟!

顺便说一下,许多NoSQL数据库像Couchbase服务器或MongoDB做本地索引。关于本地索引详细信息,可参见Couchbase服务器地图,点这里

图片描述

  • 全局索引:该指数是独立分区,并放置在节点上的数据。它可以跟上突变的挑战,作为索引的数据需要一个网络访问,并且非常适合查询。想象一下上面相同的查询。该指数现在位于一个节点或两个。
#index for the query would look something like this

INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) 

WHERE type=“customer_profile”

AND continent="Europe";

INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) 

WHERE type=“customer_profile”

AND continent="America";

INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) 

WHERE type=“customer_profile”

AND continent="Asia";

以下是在一个全局索引的群集上执行查询的步骤:  
   
1. 现在我们知道答案全局索引上的一个节点!所以,不需要分散在这里!我们只需从索引中检索顶部登录数 
2. 最后一步是将结果发送回客户端。  
    
不像前面的例子中的100个节点,你的第101节点现在可以做真正的工作!查询延迟快很多!

图片描述

全局索引在分布式数据库中很少出现(NoSQL或其他)。MongoDB和Cassandra都没有全局索引。然而,可以在Couchbase服务器下的全局二级索引看到全局索引。Couchbase 服务器GSIS也可以独立部署到集群中的一个单独的区域使用索引服务。这意味着数据服务节点正在做的核心数据操作(插入/更新/删除)不需要在集群的其他部分进行索引。这个部署拓扑称为MDS,你可以在这里了解更多。

在分布式数据库的世界里,重要的是选择索引。否则,查询的延迟可能是不可预测的,大数据可以实时查询到不可能的东西!你可以在Couchbase服务器上查看一些添加索引的选项。

本文转载自:Indexing Big Data: Global vs. Local Indexes in Distributed Databases

effto
粉丝 3
博文 56
码字总数 28418
作品 0
长春
私信 提问
2.0解析系列 | 一文详解 OceanBase 2.0 的“全局索引”功能

OB君:本文是 “OceanBase 2.0 技术解析系列” 的第九篇文章。今天我们来聊聊2.0的全局索引功能。本文将带你简单回顾全局索引的概念,并详细介绍OceanBase 2.0版本如何实现全局索引的功能。更...

荔子liqi
2018/11/23
0
0
分布式关系数据库--Alibaba Wasp

Wasp 是类Google MegaStore & F1的分布式关系数据库。 最近几年随之Bigtable和NoSQL的兴起,社区产品HBase逐步走向NoSQL系统的主流产品,优势明显然而缺点也明显,大数据平台下的业务由 SQL向...

叶秀兰
2014/06/19
1K
0
2.0解析系列 | OceanBase 2.0 之 索引实时生效

OB君:本文是 “OceanBase 2.0 技术解析系列” 的第七篇文章。今天我们来聊聊数据的持续可用,说说2.0的索引实时生效功能。更多精彩欢迎关注OceanBase公众号持续订阅本系列内容! 引言 随着业...

荔子liqi
2018/11/02
0
0
[Oracle] Local VS Global 分区索引

在Oracle中,索引和表一样也可以分区。有两种类型的分区索引,本地分区索引(Local)和全局分区索引(Global)。 1、本地索引(Local) 本地分区索引使用LOCAL关键字创建,其分区边界与表相同...

长平狐
2013/06/03
175
0
[Oracle] Local VS Global 分区索引

在Oracle中,索引和表一样也可以分区。有两种类型的分区索引,本地分区索引(Local)和全局分区索引(Global)。 1、本地索引(Local) 本地分区索引使用LOCAL关键字创建,其分区边界与表相同...

长平狐
2013/06/03
578
0

没有更多内容

加载失败,请刷新页面

加载更多

C 语言 二级指针操作文件 柔性数组使用

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct _info* pInfo;struct _info{int line;int len;char data[0];}info;int getFil......

小张525
50分钟前
2
0
中介者模式

https://blog.csdn.net/jason0539/article/details/45216585

南桥北木
50分钟前
1
0
抽离css以及公共js

分离css 分离css:为何要把 CSS 文件分离出来,而不是直接一起打包在 JS 中。最主要的原因是我们希望更好地利用缓存。 extract-text-webpack-plugin > 1. 假设我们原本页面的静态资源都打包成...

莫西摩西
今天
2
0
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的。 如何设置才能让出来呢? 1:打开"系统管理"——"Configure Global Sec...

shzwork
今天
2
0
BAT面试必问HashMap源码分析

HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈...

别打我会飞
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部