刚接触 es, 看到有些资料说是这样的关系
es | mysql |
---|---|
index | database |
type | table |
field | column |
但是在 es6 时一个 index 只能有一个 type, es7 到 es8 则完全删除了 type 的概念, 这时候该如何理解 es 的 index 呢?
另外, mysql 对一个 tabel 的 column 有数量限制, es 默认对一个 index 的 field 限制 1000 个, 可以调节, 所以 mysql 和 es 处理字段(field | column)是相同的吗? 为什么数据库对列的个数有限制?
1
LeegoYih 2022-09-11 00:16:32 +08:00 1
没必要强行用数据库的思维来使用 es ,这只会让初学者更加困惑,index 就是表示一种(一类)东西,从字面意思去理解即可。
为什么删除 type 可以看官方的解释: https://github.com/elastic/elasticsearch/blob/6.5/docs/reference/mapping/removal_of_types.asciidoc 谷歌机翻: 为什么要删除映射类型? 最初,我们谈到索引类似于 SQL 数据库中的数据库,类型相当于表。 这是一个糟糕的类比,导致了错误的假设。在 SQL 数据库中,表是相互独立的。一个表中的列与另一个表中的同名列无关。对于映射类型中的字段,情况并非如此。 在 Elasticsearch 索引中,不同映射类型中具有相同名称的字段在内部由相同的 Lucene 字段支持。换句话说,使用上面的示例,用户类型中的 user_name 字段与 tweet 类型中的 user_name 字段存储在完全相同的字段中,并且两个 user_name 字段在两种类型中必须具有相同的映射(定义)。 例如,当您希望 delete 成为同一索引中一种类型的日期字段和另一种类型的布尔字段时,这可能会导致挫败感。 最重要的是,在同一索引中存储具有很少或没有共同字段的不同实体会导致数据稀疏并干扰 Lucene 有效压缩文档的能力。 由于这些原因,我们决定从 Elasticsearch 中删除映射类型的概念。 |
2
zhangdadadapao 2022-09-11 03:16:00 +08:00 via Android
es 的 index 在系统应用设计的时候理解成表没啥问题
mysql 的字段不设置建立索引默认查的时候扫全表吧,不会做什么特殊处理; es 那边会根据类型不同去建行存列存 bkd 树等索引,会根据 query 的不同走各类索引(还可能会涉及到多个 query 组合走不一样的索引), |
3
ksc010 2022-09-11 17:49:02 +08:00
依然可以 ES 的 index 理解为表(其实更像是 excel 的表,之前可以有 1 个 sheet ,ES6 后没有 sheet 了)
关于 mysql 和 ES 字段的问题,根本原因 就是 他们的 存储 索引机制不一样 ES 下 我不管 index 的一个 document 有多少字段,或者有多大(当然 document 越大肯定对速度是有影响的) 反正存多少字段都是存,只有需要检索的时候 ES 才会用到字段 为了提高速度 会给指定的字段建立索引 |