Skip to content
📖0 阅读·🤍0 点赞

ES常用基本数据类型故事版

  • binary:binary类型用于存储Base64编码的二进制数据。在某些情况下,可能需要存储一些二进制数据,比如图片、文件等,但Elasticsearch并不直接支持存储原始二进制数据。因此,可以将二进制数据转换为Base64编码的字符串,然后存储在binary类型中。
  • boolean:boolean类型用于存储布尔值,即true或false。在数据中有一些字段只需要表示是或否、真或假的情况时,可以使用boolean类型来存储这种信息。比如,表示某个状态是否开启、某个条件是否满足等情况。
  • alias:alias类型用于定义字段别名。在Elasticsearch中,可以为字段设置别名,这样可以在查询时使用别名代替字段名称,提高查询的灵活性和可读性。通过定义字段别名,可以简化查询语句,减少重复性代码,同时也可以保护字段名称的一致性。

我们继续数字村的故事!这次村里新开了三家神奇的店铺,专门处理一些特别的“货物”:包裹、开关和外号!


故事:数字村的特色新店

数字村越来越繁荣,村民们有了更多稀奇古怪的东西需要存储和处理。于是,村里又开了三家独具匠心的店铺:

  1. 编码快递站 (binary) - 存储Base64编码的二进制数据

    • 店主: 编码侠
    • 招牌: “万物皆可码,安全又到家!” (存储编码后的二进制)
    • 做什么:
      • 这家店不直接收原始货物(比如一幅画的原稿、一个音乐盒的原件、一个视频文件的原片)。因为这些“原生态”的东西太复杂、格式太多样,村里的仓库系统(Elasticsearch) 不认识也存不了
      • 编码侠有个绝活:他有一个神奇的 Base64 编码器!任何复杂的“货物”(二进制数据)交给他,他都能用这个编码器把它转换成一种由字母、数字和几个特殊符号组成的、长长的、标准的字符串。这个过程就像把货物拆解、打包、贴上标准的快递单。
      • 转换后的这个标准字符串,就可以像普通文本一样,安全地存放在村里的文本仓库里了。
    • 存什么:
      • 画家想存一幅小画的预览图(不能存原图太大)。
      • 音乐家想存一小段音乐的乐谱编码(不是原始音频文件)。
      • 档案馆想存一份重要文件的扫描件编码(原始扫描文件太大太复杂)。
    • 特点:
      • 不存原件,只存“编码快递单”:存的是Base64字符串,不是原始二进制。
      • 需要解码:要用的时候(比如显示图片),需要把字符串取出来,再用专门的解码器(解码快递单)还原成原始数据(拆包取出货物)。
      • 空间占用大:Base64编码会让数据体积膨胀约33%,所以只适合存小型的二进制数据(比如缩略图、小图标、小文档片段)。存大文件(高清图、视频)非常不划算!
  2. 是非开关铺 (boolean) - 存储布尔值 (true/false)

    • 店主: 开关叔
    • 招牌: “非黑即白,绝不含糊!” (只存真/假)
    • 做什么:
      • 这家店只卖一种东西:开关!而且只有两种状态:开(true)关(false)
      • 开关叔的仓库里没有复杂的货架,只有无数个小小的开关位。每个开关位只记录一个最简单的状态。
    • 存什么:
      • 路灯管理员的路灯开关状态(开灯=true,关灯=false)。
      • 村民家里的门锁状态(已锁=true,未锁=false)。
      • 网站上的用户订阅状态(已订阅=true,未订阅=false)。
      • 任务系统的完成状态(已完成=true,未完成=false)。
    • 特点:
      • 极其简单:只处理两种状态,没有中间地带(没有“可能”、“大概”)。
      • 极其高效:存储和查询都非常快,占用空间极小。
      • 清晰明了:用于表示任何只有两种对立状态的情况。
  3. 外号管理局 (alias) - 定义字段别名

    • 店主: 外号通
    • 招牌: “一名多用,方便沟通!” (给字段起别名)
    • 做什么:
      • 数字村的仓库系统里,每个货物(数据)都放在特定的**货架(字段)**上,货架都有名字,比如 user_id, order_date, product_price
      • 有时候,这些货架的名字太长、太技术化、或者容易混淆。比如:
        • customer_shipping_address_postal_code 这个名字太长了!
        • 开发者一开始叫 create_time,后来想统一叫 timestamp
        • 同一个意思,不同地方叫法不同(比如 user_iduid)。
      • 外号通就负责解决这个问题!他维护一本 “外号登记簿”
      • 你可以去找外号通说:“我想给货架 customer_shipping_address_postal_code 起个外号,叫 zip_code!” 或者 “以后我想用 timestamp 来指代 create_time 这个货架!”
      • 外号通就会在登记簿上记下来:zip_codecustomer_shipping_address_postal_code 的外号;timestampcreate_time 的外号。
    • 有什么用:
      • 简化查询: 村民(用户)在找东西(查询数据)时,不用再写又长又臭的原始货架名了!可以直接用外号 zip_code 或者 timestamp,外号通会自动找到对应的真实货架。查询语句变得更简洁、易读。
      • 统一称呼: 即使后台货架改名了(比如 create_time 改成了 creation_timestamp),只要外号通那里把 timestamp 的外号指向新的货架名,村民(用户)的查询语句(用 timestamp)就完全不用改!保护了代码的一致性。
      • 提高灵活性: 一个货架可以有多个外号,满足不同场景下的称呼需求。
    • 特点:
      • 不是新货架! 外号本身不存储数据!它只是真实货架(字段)的一个指针快捷方式
      • 查询更友好: 让写查询语句(比如Kibana里搜索、写程序查询)的人更轻松。
      • 维护更方便: 底层字段名变了,只需更新外号指向,不影响上层使用。

故事总结:

数字村的新店铺让数据管理更灵活了:

  • 想存点小图片、小文件的编码信息?去编码快递站 (binary),记得东西要小,而且取用时要解码!
  • 事情只有开/关、是/否、真/假两种状态?去是非开关铺 (boolean),简单明了效率高!
  • 觉得仓库里的货架名太长、太乱、想改名又怕影响别人?去找外号管理局 (alias)!给货架起个好记的外号,查询方便又灵活,底层改名也不怕!