我正在努力減少存盤在 ElasticSearch 中的資料的磁盤需求。資料主要是包含浮點值串列的欄位。我正在從流式作業生成 json 資料,然后將其放入 Elasticsearch。 將資料型別從 float 更改為 short 是否有助于減少磁盤需求?(請記住,值的范圍在很短的范圍內,我們可以四舍五入浮點值。)
我有一個檔案:https ://www.elastic.co/guide/en/elasticsearch/reference/current/number.html 但是這里有矛盾的陳述 -
- 存盤根據存盤的實際值進行了優化,因此選擇一種型別而不是另一種型別不會對存盤要求產生影響。
- 這對節省磁盤空間很有幫助,因為整數比浮點更容易壓縮。
有人可以幫忙解釋一下嗎?
uj5u.com熱心網友回復:
浮點值是 32 位 IEEE 754 浮點數,而 short 值是 16 位整數,因此很明顯,short 需要更少的磁盤空間。
您提到的第一個陳述句僅對整數型別有效,而第二個陳述句是關于存盤為整數的浮點數,因此有點像比較蘋果和橘子。
但是,對于您的具體情況,您的值在一個短范圍內,讓我們做一個非常天真的但經驗主義的測驗,我們生成大量隨機短值(比如 1M)并將它們存盤在兩個不同的索引中,一個欄位映射是short和另一個欄位映射是float,然后簡單地比較它們的大小。
以下是我使用的映射:
PUT shorts
{
"mappings": {
"properties": {
"my_short": {
"type": "short"
}
}
}
}
PUT floats
{
"mappings": {
"properties": {
"my_float": {
"type": "float"
}
}
}
}
這是存盤在其中的隨機值:
{"index":{"_index":"shorts"}}
{"my_short":1799}
{"index":{"_index":"floats"}}
{"my_float":1799}
{"index":{"_index":"shorts"}}
{"my_short":31014}
{"index":{"_index":"floats"}}
{"my_float":31014}
{"index":{"_index":"shorts"}}
{"my_short":-880}
{"index":{"_index":"floats"}}
{"my_float":-880}
{"index":{"_index":"shorts"}}
{"my_short":31159}
{"index":{"_index":"floats"}}
{"my_float":31159}
...
加載所有資料后,我們可以檢查索引的各自大小
GET _cat/indices/shorts,floats?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open floats puHwIu5wSSG23QEq4qxROA 1 1 1000000 0 57.7mb 28.8mb
green open shorts mDEHUB3FQoyuMNbsDy3zwA 1 1 1000000 0 53.3mb 26.6mb
所以答案很明確:對于完全相同的資料,浮點值占用更多空間!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/513932.html
標籤:弹性搜索
