偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Elasticsearch 架構與索引設計完全指南:輕松掌握建模到實戰(zhàn)的寶貴經驗

開發(fā) 架構
本文系統(tǒng)性地介紹了 Elasticsearch 的架構設計、索引規(guī)范、Mapping 優(yōu)化、查詢性能調優(yōu)及生命周期管理等核心內容。通過電商產品與用戶行為日志兩大實戰(zhàn)案例,詳解字段類型選擇、分片策略、ILM 策略配置,以及寫入、查詢、聚合的優(yōu)化技巧。

本文系統(tǒng)性地介紹了 Elasticsearch 的架構設計、索引規(guī)范、Mapping 優(yōu)化、查詢性能調優(yōu)及生命周期管理等核心內容。通過電商產品與用戶行為日志兩大實戰(zhàn)案例,詳解字段類型選擇、分片策略、ILM 策略配置,以及寫入、查詢、聚合的優(yōu)化技巧。附有監(jiān)控指標、日常運維清單和不同規(guī)模應用的架構方案,助力構建高性能、高可用、易維護的搜索與數據分析平臺。

1. 架構設計概述

1.1 設計目標

  • 高性能: 毫秒級查詢響應,支持高并發(fā)訪問
  • 高可用: 99.9% 以上服務可用性
  • 可擴展: 支持水平擴展,應對數據增長
  • 易維護: 清晰的索引結構,便于運維管理

1.2 核心設計原則

  • 合理的數據建模: 根據查詢模式設計索引結構
  • 適度的冗余: 在存儲和性能間平衡
  • 分片策略: 合理規(guī)劃分片數量和大小
  • 映射優(yōu)化: 精確定義字段類型和分析器
  • 生命周期管理: 實施 ILM 策略管理數據

2. 索引設計規(guī)范

2.1 命名規(guī)范

<業(yè)務域>-<數據類型>-<環(huán)境>-<版本>-<時間標識>

示例:
- product-catalog-prod-v1
- user-behavior-prod-v2-2025.10
- order-transaction-dev-v1-2025.10.18

命名規(guī)則:

  • 使用小寫字母
  • 使用連字符 - 分隔
  • 避免使用特殊字符
  • 時間序列數據包含日期標識

2.2 分片策略

分片數量計算

建議分片大小: 20GB - 50GB
分片數量 = 預估數據總量 / 目標分片大小

示例:
- 數據量 500GB,建議分片數: 500GB / 30GB ≈ 17 個主分片

分片配置建議

數據規(guī)模

主分片數

副本數

說明

< 10GB

1-3

1

小型索引

10GB - 100GB

3-5

1-2

中型索引

100GB - 1TB

5-15

1-2

大型索引

> 1TB

15-30

2

超大索引,考慮索引拆分

2.3 副本策略

{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1,
    "refresh_interval": "30s"
  }
}

副本數建議:

  • 生產環(huán)境: 至少 1 個副本
  • 讀密集型: 2-3 個副本
  • 寫密集型: 1 個副本
  • 開發(fā)環(huán)境: 0 個副本

3. Mapping 設計

3.1 字段類型選擇

基礎類型映射表

數據特征

ES 類型

說明

精確值(ID、狀態(tài))

keyword

不分詞,支持聚合

全文搜索

text

分詞索引

數值計算

long, integer, double

支持范圍查詢

日期時間

date

支持日期范圍查詢

布爾值

boolean

true/false

IP 地址

ip

支持 CIDR 查詢

地理位置

geo_point, geo_shape

地理查詢

嵌套對象

nested

獨立索引的對象數組

父子關系

join

關聯文檔

3.2 實戰(zhàn)案例:電商產品索引

{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1,
    "refresh_interval": "30s",
    "max_result_window": 10000,
    "analysis": {
      "analyzer": {
        "ik_smart_pinyin": {
          "type": "custom",
          "tokenizer": "ik_smart",
          "filter": ["lowercase", "pinyin_filter"]
        }
      },
      "filter": {
        "pinyin_filter": {
          "type": "pinyin",
          "keep_first_letter": true,
          "keep_full_pinyin": false,
          "keep_original": true
        }
      }
    }
  },
"mappings": {
    "properties": {
      "product_id": {
        "type": "keyword"
      },
      "product_name": {
        "type": "text",
        "analyzer": "ik_smart_pinyin",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          },
          "standard": {
            "type": "text",
            "analyzer": "standard"
          }
        }
      },
      "category": {
        "type": "keyword"
      },
      "category_path": {
        "type": "text",
        "analyzer": "path_analyzer",
        "fielddata": true
      },
      "price": {
        "type": "scaled_float",
        "scaling_factor": 100
      },
      "stock": {
        "type": "integer"
      },
      "sales_count": {
        "type": "long"
      },
      "rating": {
        "type": "half_float"
      },
      "brand": {
        "type": "keyword"
      },
      "tags": {
        "type": "keyword"
      },
      "description": {
        "type": "text",
        "analyzer": "ik_max_word"
      },
      "attributes": {
        "type": "nested",
        "properties": {
          "name": {
            "type": "keyword"
          },
          "value": {
            "type": "keyword"
          }
        }
      },
      "images": {
        "type": "keyword",
        "index": false
      },
      "status": {
        "type": "keyword"
      },
      "created_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
      },
      "updated_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
      },
      "location": {
        "type": "geo_point"
      },
      "seller": {
        "properties": {
          "seller_id": {
            "type": "keyword"
          },
          "seller_name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword"
              }
            }
          },
          "seller_rating": {
            "type": "half_float"
          }
        }
      }
    }
  }
}

3.3 實戰(zhàn)案例:用戶行為日志索引

{
  "settings": {
    "number_of_shards": 10,
    "number_of_replicas": 1,
    "refresh_interval": "5s",
    "index.lifecycle.name": "user-behavior-policy",
    "index.lifecycle.rollover_alias": "user-behavior-prod"
  },
"mappings": {
    "properties": {
      "user_id": {
        "type": "keyword"
      },
      "session_id": {
        "type": "keyword"
      },
      "event_type": {
        "type": "keyword"
      },
      "event_name": {
        "type": "keyword"
      },
      "timestamp": {
        "type": "date"
      },
      "page_url": {
        "type": "keyword",
        "fields": {
          "text": {
            "type": "text"
          }
        }
      },
      "referrer": {
        "type": "keyword"
      },
      "device": {
        "properties": {
          "type": {
            "type": "keyword"
          },
          "os": {
            "type": "keyword"
          },
          "browser": {
            "type": "keyword"
          }
        }
      },
      "geo": {
        "properties": {
          "country": {
            "type": "keyword"
          },
          "city": {
            "type": "keyword"
          },
          "location": {
            "type": "geo_point"
          }
        }
      },
      "properties": {
        "type": "object",
        "enabled": false
      },
      "ip_address": {
        "type": "ip"
      },
      "user_agent": {
        "type": "text",
        "index": false
      }
    }
  }
}

4. 查詢優(yōu)化設計

4.1 字段設計優(yōu)化

Multi-fields 策略

{
  "product_name": {
    "type": "text",
    "analyzer": "ik_smart",
    "fields": {
      "keyword": {
        "type": "keyword"
      },
      "pinyin": {
        "type": "text",
        "analyzer": "pinyin_analyzer"
      },
      "suggest": {
        "type": "completion"
      }
    }
  }
}

使用場景:

  • 主字段: 全文搜索
  • .keyword: 精確匹配、聚合、排序
  • .pinyin: 拼音搜索
  • .suggest: 自動補全

4.2 禁用不必要的功能

{
  "large_text": {
    "type": "text",
    "index": false,
    "norms": false,
    "doc_values": false
  },
  "static_content": {
    "type": "keyword",
    "index": false
  }
}

優(yōu)化建議:

  • index: false: 不需要搜索的字段
  • norms: false: 不需要評分的字段
  • doc_values: false: 不需要聚合/排序的字段
  • enabled: false: 僅存儲,不索引不解析

5. 索引生命周期管理 (ILM)

5.1 ILM 策略示例

{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_size": "50GB",
            "max_age": "7d",
            "max_docs": 100000000
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "warm": {
        "min_age": "7d",
        "actions": {
          "allocate": {
            "number_of_replicas": 1
          },
          "forcemerge": {
            "max_num_segments": 1
          },
          "shrink": {
            "number_of_shards": 1
          },
          "set_priority": {
            "priority": 50
          }
        }
      },
      "cold": {
        "min_age": "30d",
        "actions": {
          "allocate": {
            "number_of_replicas": 0
          },
          "freeze": {},
          "set_priority": {
            "priority": 0
          }
        }
      },
      "delete": {
        "min_age": "90d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

5.2 階段劃分策略

階段

時間

操作

適用場景

Hot

0-7天

高性能寫入和查詢

實時數據

Warm

7-30天

減少副本,合并段

近期數據

Cold

30-90天

凍結索引,最小資源

歷史數據

Delete

90天+

刪除索引

過期數據

6. 性能優(yōu)化建議

6.1 寫入優(yōu)化

{
  "settings": {
    "refresh_interval": "30s",
    "number_of_replicas": 0,
    "translog": {
      "durability": "async",
      "sync_interval": "30s",
      "flush_threshold_size": "1gb"
    }
  }
}

批量寫入配置:

  • 批量大小: 5-15 MB
  • 并發(fā)請求: 根據節(jié)點數調整
  • 初始化時: 副本設為 0,寫入完成后恢復

6.2 查詢優(yōu)化

使用 Filter Context

{
  "query": {
    "bool": {
      "must": [
        { "match": { "product_name": "手機" } }
      ],
      "filter": [
        { "term": { "status": "active" } },
        { "range": { "price": { "gte": 1000, "lte": 5000 } } }
      ]
    }
  }
}

分頁優(yōu)化

深度分頁問題解決:

  • 使用 search_after 替代 from/size
  • 使用 Scroll API 處理大數據集
  • 限制 max_result_window

6.3 聚合優(yōu)化

{
  "aggs": {
    "category_stats": {
      "terms": {
        "field": "category",
        "size": 10,
        "execution_hint": "map"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

7. 監(jiān)控與維護

7.1 關鍵指標監(jiān)控

指標類型

監(jiān)控項

告警閾值

集群健康

cluster_health

status != green

節(jié)點狀態(tài)

node_stats

CPU > 80%, Memory > 85%

索引性能

indexing_rate

突降 50%

查詢性能

search_latency

p99 > 1s

磁盤使用

disk_usage

> 85%

JVM 堆內存

heap_used_percent

> 75%

7.2 日常運維檢查清單

# 1. 檢查集群健康狀態(tài)
GET /_cluster/health

# 2. 查看節(jié)點狀態(tài)
GET /_cat/nodes?v

# 3. 檢查索引狀態(tài)
GET /_cat/indices?v&s=store.size:desc

# 4. 查看分片分配
GET /_cat/shards?v&h=index,shard,prirep,state,node

# 5. 檢查待處理任務
GET /_cat/pending_tasks

# 6. 查看熱點線程
GET /_nodes/hot_threads

8. 最佳實踐總結

8.1 設計階段

? DO:

  • 根據查詢模式設計索引
  • 使用合適的字段類型
  • 合理規(guī)劃分片數量
  • 設計 ILM 策略
  • 預留 20-30% 磁盤空間

? DON'T:

  • 過度設計字段
  • 分片數過多或過少
  • 忽略數據增長預估
  • 所有字段都可搜索
  • 忽略索引生命周期

8.2 開發(fā)階段

? DO:

  • 使用批量 API
  • 優(yōu)先使用 Filter Context
  • 限制返回字段
  • 使用 Query DSL 而非 Script
  • 啟用查詢緩存

? DON'T:

  • 深度分頁
  • 使用 Wildcard 查詢開頭
  • 過度使用 Script
  • 忽略查詢超時設置
  • 返回不必要的字段

8.3 運維階段

? DO:

  • 定期監(jiān)控集群狀態(tài)
  • 定期備份重要數據
  • 定期清理過期索引
  • 優(yōu)化慢查詢
  • 記錄配置變更

? DON'T:

  • 忽略告警信息
  • 磁盤使用超過 85%
  • 手動刪除系統(tǒng)索引
  • 在生產環(huán)境直接測試
  • 忽略版本升級

9. 架構方案參考

9.1 小型應用 (< 100GB)

架構配置:
- 節(jié)點數: 3
- 每節(jié)點: 8C 16G 500GB SSD
- 索引分片: 3 主 + 1 副本
- 適用場景: 企業(yè)內部搜索、小型電商

9.2 中型應用 (100GB - 1TB)

架構配置:
- 節(jié)點數: 6-9 (3 Master + 6 Data)
- Data 節(jié)點: 16C 64G 2TB SSD
- 索引分片: 5-10 主 + 1-2 副本
- 適用場景: 中型電商、日志分析平臺

9.3 大型應用 (> 1TB)

架構配置:
- 節(jié)點數: 15+ (3 Master + 10+ Data + 2 Coordinating)
- Data 節(jié)點: 32C 128G 4TB SSD
- 索引分片: 10-20 主 + 2 副本
- 冷熱分離架構
- 適用場景: 大型電商、企業(yè)級日志系統(tǒng)

10. API

10.1 常用 API 速查

# 創(chuàng)建索引
PUT /my-index

# 更新 Mapping
PUT /my-index/_mapping

# 更新 Settings (部分)
PUT /my-index/_settings

# 重建索引
POST /_reindex

# 索引別名
POST /_aliases

# 關閉索引
POST /my-index/_close

# 打開索引
POST /my-index/_open

# 刪除索引
DELETE /my-index

責任編輯:武曉燕 來源: Solomon肖哥談架構
相關推薦

2023-09-13 08:00:00

MLOps數據科學

2017-03-14 18:48:06

Android性能優(yōu)化內存優(yōu)化

2025-07-09 07:10:00

2025-07-17 13:52:57

通配符Linux命令行

2024-04-08 11:06:29

Rust測試控制

2023-07-09 09:45:25

2024-05-23 10:58:49

2023-10-10 08:28:56

JavaAPI分析引擎

2018-11-28 09:38:34

微服務架構API

2025-10-27 01:22:00

HTTP接口API

2022-07-27 08:00:00

物聯網架構連接設備

2015-04-28 11:31:43

程序員軟件項目項目預估

2023-11-02 09:02:55

Java模式

2024-02-28 10:20:08

2023-07-06 08:31:50

Python對象編程

2009-12-14 11:15:34

Linux chgrp

2025-07-15 10:53:53

2009-12-15 10:19:05

Linux應用程序

2025-06-04 08:20:00

Compressor前端開發(fā)

2018-10-29 11:41:22

架構MVCAndroid
點贊
收藏

51CTO技術棧公眾號