• Elasticsearch 为何要在 7.X版本中 去除type 的概念


    背景说明

    Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

    Elasticsearch 是一种NoSQL数据库(非关系型数据库),和常规的关系型数据库(比如:MySQL,Oralce等)的基本概念,对应关系如下:

    Elasticsearch:index   -->  type     -->   doc   -->  field

    MySQL:          数据库  -->   数据表 -->         --> 

    因为关系型数据库比非关系型数据库的概念提出的早,而且很成熟,应用广泛。

    所以,后来很多NoSQL(包括:MongoDB,Elasticsearch等)都参考并延用了传统关系型数据库的基本概念。

    一个客观的现象和事实如下:

    Elasticsearch 官网提出的近期版本对 type 概念的演变情况如下:

    5.X 版本中,一个 index可以创建多个 type

    6.X 版本中,一个 index只能存在一个 type

    7.X 版本中,直接去除了 type 的概念,就是说 index 不再会有 type。 

    为何要去除 type 的概念?

    为何不是在 6.X 版本开始就直接去除 type,而是要逐步去除type?

    Why?!

    原因分析

    1、为何要去除 type 的概念?

    答: 因为 Elasticsearch 设计初期,是直接查考了关系型数据库的设计模式,存在了 type(数据表)的概念。

    但是,其搜索引擎基于 Lucene 的,这种 “基因”决定了 type 是多余的。 Lucene 的全文检索功能之所以快,是因为 倒序索引 的存在。

    而这种 倒序索引 的生成是基于 index 的,而并非 type。多个type 反而会减慢搜索的速度

    为了保持 Elasticsearch “一切为了搜索” 的宗旨,适当的做些改变(去除 type)也是无可厚非的,也是值得的。

    所以,Why not?!

    2、为何不是在 6.X 版本开始就直接去除 type,而是要逐步去除type?

    答:因为历史原因,前期 Elasticsearch 支持一个 index 下存在多个 type的,而且,有很多项目在使用 Elasticsearch 作为数据库。

    如果直接去除 type 的概念,不仅是很多应用 Elasticsearch 的项目面临 业务、功能和代码的大改

    而且对于 Elasticsearch 官方来说,也是一个巨大的挑战(这个是伤筋动骨的大手术,很多涉及到 type 源码是要修改的)。

    所以,权衡利弊,采取逐步过渡的方式,最终,推迟到 7.X 版本才完成 “去除 type”  这个 革命性的变革

  • 相关阅读:
    centos7下更新firefox
    Centos7宽带连接
    CAS和AQS
    java中锁的概念
    并发队列
    Callable和Future
    juc下的并发工具类和线程池
    死锁和线程安全的问题
    HashMap源码分析(java1.8)
    List集合框架面试题
  • 原文地址:https://www.cnblogs.com/miracle-luna/p/10998670.html
Copyright © 2020-2023  润新知