主頁 > 軟體設計 > ElasticSearch實戰基礎教程(從概念到機制到深入透析)

ElasticSearch實戰基礎教程(從概念到機制到深入透析)

2021-01-25 11:06:02 軟體設計

1.ElasticSearch基礎概念

1.1 檔案(Doucument)

1.ElasticSearch是面向檔案的,檔案是所有可搜索資料的最小單位
	·日志檔案中的日志項
	·一本電影的具體資訊/一張唱片的詳細資訊
	·MP3播放器里面的一首歌/一遍PDF檔案中的具體內容
2.檔案是會被序列化成JSON格式,報錯在ElasticSearch中
	·JSON物件由欄位組成
	·每個欄位都有對應的欄位型別(字串/數值/布爾/日期/二進制/范圍型別)
3.每個檔案都有一個Unique ID
	·你可以自己指定ID
	·或者通過ElasticSearch自動生成

1.2JSON檔案

一篇檔案包含了一系列的欄位,類似資料庫表中一條記錄
JSON檔案格式靈活不需要預先定義格式
	·欄位的型別可以指定或者通過ElasticSearch自動推算
	·支持陣列/支持嵌套

在這里插入圖片描述

1.3 檔案的元資料

{
        "_index": "my_test_index",
        "_type": "test_idnex",
        "_id": "AXcpGrIeEQcMCfQJ7Gc5",
        "_score": 1,
        "_source": {
          "testId": "4",
          "testName": "zhaoliu"
        }
 }     

元資料,用于標準檔案的相關資訊

  • _index 檔案所屬的索引名
  • _type 檔案所屬的型別名
  • _id 檔案的唯一id
  • _source 檔案原始的JSON資料
  • _all 整合所有欄位的內容到該欄位,已被作廢
  • _version 檔案的版本資訊
  • _score 相關性打分

1.4 索引

{
  "my_test_index": {
    "settings": {
      "index": {
        "search": {
          "slowlog": {
            "level": "info",
            "threshold": {
              "fetch": {
                "warn": "200ms",
                "trace": "50ms",
                "debug": "80ms",
                "info": "100ms"
              },
              "query": {
                "warn": "200ms",
                "trace": "50ms",
                "debug": "80ms",
                "info": "100ms"
              }
            }
          }
        },
        "indexing": {
          "slowlog": {
            "level": "info",
            "threshold": {
              "index": {
                "warn": "200ms",
                "trace": "20ms",
                "debug": "50ms",
                "info": "100ms"
              }
            },
            "source": "1000"
          }
        },
        "number_of_shards": "5",
        "provided_name": "my_test_index",
        "creation_date": "1611301841428",
        "unassigned": {
          "node_left": {
            "delayed_timeout": "5m"
          }
        },
        "number_of_replicas": "1",
        "uuid": "e5B65ySmQ-GE8Tj9gUHIPw",
        "version": {
          "created": "5050399"
        }
      }
    }
  }
}
  • INDEX 索引是檔案的容器是一類檔案的結合
    • INDEX 體現了邏輯空間的概念:每個索引都有自己的mapping定義用于定義包含檔案的欄位名和欄位型別
    • Shard 體現了物理空間的概念 索引中的資料分散在Shard上
  • 索引的Mapping與Settings
    • Mapping 定義檔案欄位的型別
    • setting 定義不同的資料分布

1.5 Type

在這里插入圖片描述

  • 在7.0之前,一個Index可以設定多個Types
  • 6.0開始,Type已經被Deprecated(不推薦使用),從7.0開始一個索引只能創建一個Type - > “_doc”

1.6 抽象與類比

RDBMSElasticSearch
TableIndex(Type)
RowDocument
ColumnFiled
SchemaMapping
SQLDSL
  • 在7.0之前 一個Index 可以設定多個Types
  • 目前Type 已經被 Deprecated(不推薦使用) ,7.0開始一個索引只能創建一個Type - > “_doc”
  • 傳統關系型資料庫和ElasticSearch 的區別
    – ElasticSearch - Schemaless /相關性/高性能全文檢索
    – RDMS - 事務性/Join

2.節點、集群、分片及副本

2.1 分布式特性

  • ElasticSearch 的分布式架構的好處
    - 存盤的水平擴容
    - 提高系統的可用性,部分節點停止服務整個集群的服務不受影響
  • ElasticSearch的分布式架構
    • 不同集群通過不同的名字來區分 默認為 “elasticsearch”
    • 通過組態檔修改,或者在命令列中 -E cluster.name=geektime 進行設定
    • 一個集群可以有一個或者多個節點

2.2 節點

  • 節點是一個ElasticSearch 的實體
    – 本質上就一個Java行程
    – 一臺機器上可以運行多個ElasticSearch行程,但是生產環境一般建議一臺機器只運行一個ElasticSearch 實體
  • 每一個節點都有名字 通過組態檔配置或者啟動的時候 -E node.name=node1來指定
  • 每一個接在在啟動之后會分配一個UID,保存在data目錄下

2.2.1 Master-eligible nodes(合格節點) 和Master Node(主)

  • 每個節點啟動后 默認就是一個 Master eligible節點
    • 可以設定node.master:false 禁止
  • Master-eligible可以參加選主流程,成為Master節點
  • 當第一個節點啟動的時候,它會將自己選舉成Master節點
  • 每個節點都保存了集群的狀態,只有Master節點才能修改集群的狀態資訊
    • 集群狀態(Cluster State)維護了一個集群中的必要資訊
      • 所有節點的資訊
      • 所有的索引和其相關的Mapping與Setting資訊
      • 分片的路由資訊
    • 任意節點都能修改資訊會導致資料的不一致性

2.2.2 Data Node & Coordinating Node

  • Data Node(資料節點)
    • 可以保存資料的節點叫做Data Node 負責保存分片資料,在資料擴展上起到了至關重要的作用
  • Coordinating Node(協調節點)
    • 負責接收Client請求,將請求分發到合適的節點,最終把結果匯集到一起
    • 每個節點默認都起到了 Coordinating Node職責

2.2.3 其他節點

  • Hot & Warm Node (參考鏈接Hot & Warm Node)
    – 不同硬體配置的Data Node,用來實作 Hot & Warm架構,降低集群部署的成本
  • Machine Learning Node(機器學習節點)
    – 負責跑 機器學的Job 用來做例外檢測
  • Tribe Node (協調節點 充當跨多集群聯合客戶端)
    – (5.3 開始使用Cross Cluster Search) Tribe Node 連接到不同的ElasticSearch集群,并且支持將這些集群當成一個單獨的集群

2.2.4 配置節點型別

  • 開發環境中一個節點可以承擔多種角色
  • 生產環境中,應該設定單一的角色的節點(dedicate node 專用節點)
節點型別配置引數默認值
maste eligiblenode.mastertrue
datanode.datatrue
ingestnode.ingesttrue
coordinating only每個節點默認都是coordinating 節點設定其他型別全部為false
machine learningnode.mltrue(需enable x-pack)

2.3 分片(Primary Shard & Replica Shard)

  • 主分片,用以解決資料水平擴展的問題,通過主分片,可以將資料分不到集群內的所有節點之上
    • 一個分片是一個運行的Lucene的實體
    • 主分片數在索引創建時指定,后續不允許修改,除非Reindex
  • 副本,用以解決資料高可用的問題,分片是主分片的拷貝
    • 副本分片數,可以動態調整
    • 增加副本數,還可以在一定程度上提高服務的可用性(讀取的吞吐)
  • 一個三節點的集群中,blogs索引的分配分布情況
    在這里插入圖片描述

2.3.1 分片的設定

  • 對于生產環境中分配的設定,需要提前做好容量規劃
    • 分片數設定過小
      • 導致后續無法增加節點實作水平擴展
      • 單個分片的資料量大,導致資料重新分配耗時
    • 分片數設定過大,7.0卡死,默認主分片設定成1,解決了over-sharding(shard也是一種資源,shard過多會影響集群的穩定性,因為shard過多,元資訊會變多,這些元資訊會占用堆記憶體,shard過多也會影響讀寫性能,因為每個讀寫請求都需要一個執行緒,所以如果index沒有很大的資料量,不需要設定很多shard,)的問題
      • 影響搜索結果的相關性打分,影響統計結果的準確性
      • 當個節點上過多的分片,會導致資源的浪費同時也會影響性能

2.4 查看集群的健康狀態

GET _cluster/health
{
  "cluster_name": "es-cn-zz11rb9fv000fj1pe",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 6,
  "number_of_data_nodes": 3,
  "active_primary_shards": 766,
  "active_shards": 1507,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}
GET _cat/nodes
172.17.25.39 45 91 3 0.23 0.08 0.06 di - 3Ja7gZv
172.17.25.53 55 79 1 0.00 0.01 0.05 mi * H1guebi
172.17.25.52 22 78 0 0.01 0.02 0.05 mi - rdjzfmG
172.17.25.51 24 78 0 0.00 0.01 0.05 mi - uaU255o
172.17.25.38 54 91 2 0.23 0.26 0.16 di - wQwmOos
172.17.25.40 65 89 1 0.01 0.17 0.26 di - 4mZ8XK7

GET _cat/shard
companyinfo                     4 r STARTED 31408061  38.5gb 172.17.25.38 wQwmOos
companyinfo                     4 p STARTED 31408061  40.2gb 172.17.25.39 3Ja7gZv
companyinfo                     1 p STARTED 31412834  43.2gb 172.17.25.38 wQwmOos
companyinfo                     1 r STARTED 31412834  41.7gb 172.17.25.39 3Ja7gZv
companyinfo                     3 r STARTED 31407535  37.6gb 172.17.25.40 4mZ8XK7
companyinfo                     3 p STARTED 31407535  36.8gb 172.17.25.39 3Ja7gZv
companyinfo                     2 r STARTED 31412927  41.8gb 172.17.25.40 4mZ8XK7
companyinfo                     2 p STARTED 31412927  41.2gb 172.17.25.39 3Ja7gZv
companyinfo                     0 p STARTED 31400572  40.4gb 172.17.25.40 4mZ8XK7
companyinfo                     0 r STARTED 31400572  43.1gb 172.17.25.38 wQwmOos
  • Green 主分片和副本都很正常
  • Yellow 主分片全部正常分配,有副本分片未能正常分配
  • Red 有主分片未能分配
    • 例如當服務器的磁盤容量超過85%時 去創建了一個新的索引

3.檔案的CRUD & 批量操作

3.1 檔案的CRUD

  • Type名 約定都用_doc
  • Create 如果ID已經存在會失敗
  • Index 如果ID不存在創建新的檔案否則先洗掉現有的檔案再創建新的檔案 版本會增加
  • Update 檔案必須已經存在更新只會對回應欄位做增量修改

3.1.1 Index

PUT my_test_index/_doc/1
{
	"user":"mike",
	"comment":"You know,for search"
}
  • Index和Create 不一樣的地方:如果檔案不存在,就索引新的檔案,否則現有檔案會被洗掉,新的檔案被索引,版本資訊+1

3.1.2 Create

PUT my_test_index/_create/1
{
	"user":"mike",
	"comment":"You know,for search"
}
POST my_test_index/_doc (不指定ID 自動生成)
{
	"user":"mike",
	"comment":"You know,for search"
}
  • 支持自動生成檔案ID 和指定檔案ID的兩種型別
  • 通過呼叫"post /my_test_index/_doc"
    • 系統會自動生成document id

3.1.3 Read

GET my_test_indx/_doc/_1


{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "my_store",
        "_type": "products",
        "_id": "5",
        "_score": 1,
        "_source": {
          "price": 10,
          "productName": "ZHANGSAN",
          "productID": "XHDK-A-1293-#fJ3"
        }
      }
    ]
  }
  • 找到檔案,回傳HTTP 200
    • 檔案元資訊
      • _index/_type/
      • 版本資訊,同一個ID的檔案即使被洗掉,version號也會不斷的增加
      • _source 中默認包含了檔案的所有原始資料
  • 找不到檔案 回傳HTTP 404

3.1.4 Update

POST my_test_index/_update/1
{
	"doc":{
		"user":"mike",
		"comment":"You know,ElasticSearch"
	}
}
  • Update方法不會洗掉原來的檔案,而是實作真正的資料更新
  • Post 方法/Payload 需要包含在 “doc” 中

3.1.4 Delete

DELETE my_test_index/_doc/1

3.2 Bulk API

在這里插入圖片描述

  • 支持在一次API呼叫中,對不同的索引進行操作

  • 支持四種型別操作

    • Index
    • Create
    • Update
    • Delete
  • 可以再URI中指定Index 也可以在Payload 中進行

  • 操作中單條操作失敗不會影響其他操作

  • 回傳結果包括了每一條操作執行的結果

3.3 批量讀取 -mget

批量操作可以減少網路連接所產生的開銷 提高性能
在這里插入圖片描述
在這里插入圖片描述

GET /_mget
{
	"docs": [{
			"_index": "my_store",
			"_id": 1
		},
		{
			"_index": "companyinfo",
			"_id": "cd5b8daadc31482e84715da912a604f4"
		}
	]
}



{
  "docs": [
    {
      "_index": "my_store",
      "_type": "products",
      "_id": "1",
      "_version": 4,
      "found": true,
      "_source": {
        "price": 12,
        "productID": "XHDK-A-1293-#fJ3"
      }
    },
    {
      "_index": "companyinfo",
      "_type": "companyinfo",
      "_id": "cd5b8daadc31482e84715da912a604f4",
      "_version": 1,
      "found": true,
      "_source": {
        "entName": "廣西金朋豪友投資有限公司",
        "orgLogo": "",
        "regCapital": "500萬元人民幣",
        "city": "廣西壯族自治區",
        "regDate": "2017-05-17",
        "industry": "商務服務業",
        "taxpayerIdNo": "91450800MA5L585X6F",
        "creditCode": "91450800MA5L585X6F",
        "registrationAuthority": "貴港市市場監督管理局",
        "staffSize": "",
        "orgCode": "MA5L585X-6",
        "enterpriseStatus": "存續(在營、開業、在冊)",
        "id": "cd5b8daadc31482e84715da912a604f4",
        "businessRegCode": "450800000151505",
        "email": "",
        "introduction": "",
        "regCapitalNumber": 500,
        "website": "",
        "address": "貴港市解放北路龍圣新村小區(四小區213號)一樓",
        "town": "",
        "bossId": "4b12e1b8d1ef11-p-4b12e276d1ef1",
        "corporation": "蒙雪",
        "businessScope": "對文化產業、旅游業、旅游商品的投資;對建筑業的投資;企業形象策劃,市場營銷策劃,賽事活動策劃,舞臺造型策劃,婚禮慶典活動策劃;展覽展示服務,會務服務,禮儀服務,攝影服務;網路資訊技術的開發、咨詢、轉讓服務;影視策劃咨詢,企業管理咨詢,投資資訊咨詢(以上專案除國家有專項規定外);電視節目制作服務(具體專案以審批部門批準為準);動漫設計;出版物的零售(具體專案以審批部門批準為準),室內外裝飾裝修工程,建筑工程設計,市政工程,景觀工程設計(以上專案憑資質證經營);餐飲服務(具體專案以審批部門批準為準);設計、制作、代理、發布國內各類廣告;演出經紀(具體專案以審批部門批準的為準);政府采購、招投標代理、工程咨詢、土地評估、房地產評估、資產評估、房地產評估審計、工程預結算,",
        "businessTerm": "長期",
        "contributedcapital": "",
        "checkDate": "2017-05-17",
        "enterpriseType": "有限責任公司(自然人獨資)",
        "orgNameEn": "",
        "taxpayerQualification": "",
        "telphone": "",
        "district": "",
        "sameEnterprise": "<關聯企業3>",
        "oldOrgName": "",
        "readAddress": "貴港市解放北路龍圣新村小區(四小區213號)一樓",
        "contributors": ""
      }
    }
  ]
}

3.4 批量查詢 -msearch

在這里插入圖片描述

3.5常見錯誤回傳

問題原因
無法連接網路故障或集群故障
連接無法關閉網路故障或節點出錯
429集群過于繁忙
4XX請求體格式有誤
500集群內部錯誤

4.倒排索引

4.1 正排索引和倒排索引

在這里插入圖片描述

  • 倒排索引包含兩個部分
    • 單詞詞典(Term Dictionary),記錄所有檔案的單詞,記錄單詞到倒排串列的關聯關系
      • 單詞詞典一般比較大,可以通過B+樹或哈希拉鏈法實作,以滿足高性能的插入和查詢
    • 倒排串列(Posting List) 記錄了單詞對應的檔案結合,由倒排索引組成
      • 倒排索引項(Posting)
        • 檔案ID
        • 詞頻 TF 該單詞在檔案中出現的次數用于相關性評分
        • 位置(Position) 單詞在檔案中分詞的位置,用于陳述句搜索(phrase query)
        • 偏移(Offset) 記錄單詞的開始結束位置,實作高亮顯示

在這里插入圖片描述

4.2 ElasticSearch的倒排索引

  • ElasticSearch的JSON檔案中的每個欄位都有自己的倒排索引
  • 可以指定對某些欄位不做索引
    • 優點:節省存盤空間
    • 缺點:欄位無法被搜索

5.分詞器

5.1 Alalysis 與 Analyzer

  • Alalysis 文本分析是把全文本轉換一系列單詞(term/token)的程序,也叫做分詞
  • Alalysis 是通過Analyzer來實作的
    • 可使用ElasticSearch內置的分析器,或者采用定制化分析器
  • 除了在資料寫入時轉換詞條,匹配Query陳述句的時候也需要用相同的分析器對陳述句進行分析
    在這里插入圖片描述

5.2 Analyzer的組成

  • 分詞器是專門處理分詞的組件,Analyzer由三部分組成
    -Character Filters(針對原始文本處理,例如出去html)/Tokenizer(按照規則切分單詞)/Token Filter(將切分的單詞進行加工,小寫,洗掉stopwords,增加同義詞)
    在這里插入圖片描述

5.3 Elasticsearch的內置分詞器

  • Standard Analyzer 一默認分詞器,按詞切分,小寫處理
  • Simple Analyzer 一按照非字母切分(符號被過濾),小寫處理
  • Stop Analyzer 一小寫處理,停用詞過濾(the,a,is)
  • Whitespace Analyzer一按照空格切分,不轉小寫
  • Keyword Analyzer 一不分詞,直接將輸入當作輸出
  • Patter Analyzer 一正則運算式,黑默認\W+(非字符分隔)
  • Language 一提供了30多種常見語言的分詞器
  • Customer Analyzer自定義分詞器

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/252112.html

標籤:其他

上一篇:淺談用戶中心-資料庫設計

下一篇:apache 測驗 5

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more