Es与Mysql的区别,一看就懂!
(提前声明:文章由作者:张耀烽/CSDN主页:https://blog.csdn.net/youbitch1/
结合自己生产中的使用经验整理,最终形成简单易懂的文章,写作不易,转载请注明)
(整个教程的ES版本以及Kibana版本都是基于5.6.8)
(文章参考:Elasticsearch权威指南(书籍),Elasticsearch官方文档JavaApi5.6.8,实际项目中的应用场景)
(帮到到您请点点关注,文章持续更新中!)
(个人Git主页:https://github.com/Mydreamandreality)\
OK.本来前一章了解了是如何给ES发送restful请求,这章是要准备搞一个增删改查的案例的
但是我觉得还是再详细的解释一遍ES和Mysql的区别,具体在哪里,方便后面的学习
-
Elasticsearch面向文档
-
什么叫面向文档?
-
应用中的对象很少只是简单的键值列表,更多时候它拥有复杂的数据结构,比如包含日期、 地理位置、另一个对象或者数组。
-
比如:你的数据可能是这个样子,或者更复杂
-
-
-
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 16137,
"max_score": 1,
"hits": [
{
"_index": "origin_flow_data_20190111",
"_type": "logs",
"_id": "AWg4fyND8G2qFi8QNpwr",
"_score": 1,
"_source": {
..........省略
}
..........省略
-
如果上面的数据存储到Mysql你需要怎么做?兄弟萌思考一下
-
如果将这些数据保存到由行和列组成的关系数据库中
-
就好像是把一个丰富,信息表现力强的对象拆散了放入一个非常大的表格中:
-
你不得 不拆散对象以适应表模式(通常一列表示一个字段),然后又不得不在查询的时候重建它们
-
你忍心这么操作吗???兄弟
-
-
在Elasticsearch中是怎么处理的?兄弟睁开眼!
-
Elasticsearch是面向文档(document oriented)的
-
这个意思就是它可以存储整个对象或文档 (document),所以ES的Type(可以理解为Mysql的表)中的数据是这样的
-
当然可以更复杂!
-
而且它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索
-
在 Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
-
这种理解数据的方式与以往完全不同,所以这也是Elasticsearch能够执行复杂的全文搜索的原因之一
-
-
之前简单的总结过一次ES与Mysql的区别,这里再次总结一次
-
在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,
Relational DB -> Databases -> Tables -> Rows -> Columns //这个就是Mysql的结构,不多BB,都懂
Elasticsearch -> Index -> Types -> Documents -> Fields //这个就是ES的结构
#ES的index代表Mysql中的数据库
#ES的types代表Mysql中的Tables
#ES的Document代表Mysql中的行
#ES的Fields代表Mysql中的列
Elasticsearch集群可以包含多个索引index数据库
每一个索引可以包含多个类型 types表,
每一个类型包含多个文档documents行
每个文档包含多个字段 Fields列
解释一下当时我学习时的误区:摘自官方文档5.x版本
[索引]含义的区分 你可能已经注意到索引(index)这个词在Elasticsearch中有着不同的含义,
所以有必要在 此做一下区分:
索引(名词) 如上文所述,一个索引(index)就像是传统关系数据库中的数据库,
它 是相关文档存储的地方,index的复数是indices 或indexes。
OK,ES与MYSQL的区别就先说到这里,后续有什么遗漏的地方我再补充----
下一章开始写restful的增删改查,
之后就是JavaApi如何使用!