我有一个使用MVC模式开发的应用程序,现在我想索引它的多个模型,这意味着每个模型都有不同的数据 struct .

  • 是使用多个索引(每个模型一个索引)好呢,还是每个模型在同一索引内有一个类型更好?我认为,这两种方式还需要不同的搜索查询.我才刚开始做这个.

  • 如果数据集很小或很大,这两个概念之间的性能是否存在差异?

如果有人能为我推荐一些好的样本数据,我会亲自测试第二个问题.

推荐答案

这两种方法都有不同的含义.

假设您使用的是Elasticsearch的默认设置,每个模型有1个索引将显著增加碎片的数量,因为1个索引将使用5个碎片,5个数据模型将使用25个碎片;虽然1个索引中有5种对象类型,但仍将使用5个碎片.

将每个数据模型作为索引的含义:

  • 在索引内搜索高效快速,因 for each 分片的数据量应该较小,因为它分布在不同的索引中.
  • 从2个或更多索引中搜索数据模型组合将产生开销,因为查询将不得不跨索引发送到更多分片,编译后发送回用户.
  • 如果您的数据集很小,则不建议这样做,因为创建每个额外的分片会导致更多的存储,并且性能yield 微乎其微.
  • 如果您的数据集很大,并且您的查询处理时间较长,建议使用专用分片来存储您的特定数据,并且Elasticsearch会更容易处理.

将每个数据模型作为索引中的对象类型的含义:

  • 一个索引的5个分片中会存储更多的数据,这意味着当您跨不同的数据模型进行查询时,开销问题会更小,但分片的大小会大得多.
  • 分片中的数据越多,Elasticsearch搜索就需要更长的时间来搜索,因为过滤上有更多的文档.
  • 如果您知道要处理1TB的数据,并且没有跨Elasticsearch映射中的不同索引或多个碎片分布数据,则不建议使用此选项.
  • 建议用于较小的数据集,因 for each 分片都会占用硬件空间,因此不会浪费存储空间来获得微不足道的性能提升.

如果你问什么是太多的数据与小数据?通常,这取决于处理器速度和硬件的RAM、存储在Elasticsearch映射中每个变量中的数据量以及查询要求;在查询中使用许多方面会显著降低响应时间.这个问题没有直接的答案,你必须根据自己的需求进行基准测试.

Database相关问答推荐

如何调试Anylogic SQL数据库TLS错误?

如何高效地存储 100 万个单词并通过starts_with、contains 或ends_with 进行查询?

utf-8 与 latin1

数据库约束 - 保留(keep)还是忽略(ignore)?

哪个能够存储 1 亿条记录的嵌入式数据库具有高效的 C 或 C++ API

MYSQL CASE 语句多条件

将光标中找到的值输出到logcat?

如何在我的 Rails 应用程序中避免竞争条件?

数据库设计:多表与单表

如何使用 SQL 命令文件创建 SQLite3 数据库文件?

MySQL 数据库中列名中的连字符

在 Rails 中销毁/删除数据库

在 SQLite 数据库中加入 3 个表

Python中准备好的语句和参数化查询之间的混淆

使用 C3P0 的 JDBC 连接池

Python中的内存数据库

将文本列设为唯一键

如何以 SYS 身份在 Java 中连接到 Oracle?

ManyToOneRel 和 ForeignKey 的区别?

什么是提交日志(log)?