- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
目前的分区方案都依赖KV数据模型。KV模型简单,都是通过K访问记录,自然可根据K确定分区,并将读写请求路由到负责该K的分区。
但若涉及二级索引,就很复杂。二级索引通常并不能唯一标识一条记录,而是一种加速特定值的查询,如查询用户JavaEdge的所有操作,查找包含词语 java
的所有博客等。
许多KV存储(如HBase)为了减少实现复杂度而放弃二级索引,但一些(如 Riak)已开始支持它们,二级索引也是 Solr 和 ES 等搜索服务器的根本。
二级索引的主要挑战是不能整齐地映射到分区。有两种方案支持对二级索引进行分区:
二手车销售网(如图-4)。 每个列表都有个唯一的文档ID,以此对DB进行分区,如分区0 中的ID 0~499,分区1中的 ID 500~999。
用户搜车,可按颜色和厂商过滤,所以需要在颜色和厂商设置二级索引(在文档DB中这些是字段(field),关系DB中这些是列(column))。每当将一辆红色汽车添加到DB,DB分区都会自动将其添加到索引条目 color:red
的文档ID列表。
这种索引方法中,每个分区完全独立,各自维护自己的二级索引,且只负责自己分区内的文档,而不关心其他分区的数据。每当需要写DB(添加,删除或更新文档),只需处理包含你正在编写的目标文档ID的分区。因此,文档分区索引也被称为本地索引,而非全局索引。
但读时注意:除非对文档ID特别处理,否则不太可能将所有特定颜色或品牌的汽车放在同一分区。图-4中,红车出现在分区0、1。因此,若搜索红车,就需将查询发送到所有分区,然后合并所有返回的结果。
这种查询分区DB的方法有时称为分散/聚集(scatter/gather),显然这种二级索引的查询代价高昂。即使并行查询分区,分散/聚集也容易导致尾部读延迟显著放大。但它依旧被广泛使用:MongoDB,Cassandra,ES都直至基于文档分区的二级索引。大多DB供应商建议用户自己构建合适的分区方案,尽量由单个分区满足二级索引查询,但这并不总是可行,尤其是当查询中使用多个二级索引时(例如同时需按颜色、制造商两个条件查询)。
可对所有的数据构建全局索引,而非每个分区维护自己的二级索引(本地索引)。为避免成为瓶颈,不能将全局索引存储在一个节点,否则就破坏了设置分区均衡的目的。所以,全局索引也必须分区,但可以采用与K不同的分区策略。
如图-5,所有数据分区的红车收录在索引color:red,而索引本身也是分区的,如从 a
到 r
开始的颜色在分区 0,s
到 z
分区 1。类似的,汽车制造商的索引也被分区(两个分区的边界分别是 f
、 h
)。
这种索引称为 词条分区(term-partitioned),以待寻找的关键词本身作为索引。如颜色:color:red
。关键词(Term)这个名称源于全文索引(一种特殊的二级索引),term指文档中出现的所有单词集合。
可直接通过 关键词 本身来全局划分索引,或对其hash。根据关键词本身分区对范围扫描很有用(如对数值类的属性,e.g. 车报价),而对关键词hash分区可更均匀划分分区。
理想情况下,索引应时刻保持最新,即写入的每个数据要立即反映在最新的索引。但对词条分区,这需要跨分区的分布式事务,写入速度将受到极大影响,所以现有 DB 都不支持同步更新二级索引。
实践中,对全局二级索引的更新都是异步(即若在写入后马上读索引,则更新可能尚未反映在索引中)。
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!