Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率
注意:由于是重复数据,词法不具有通用性!文章价值不大!
摘自:https://segmentfault.com/a/1190000002695169
Doc Values 会压缩存储重复的内容。 给定这样一个简单的 mapping
mappings = {
'testdata': {
'_source': {'enabled': False},
'_all': {'enabled': False},
'properties': {
'name': {
'type': 'string',
'index': 'no',
'store': False,
'dynamic': 'strict',
'fielddata': {'format': 'doc_values'}
}
}
}
}
插入100万行随机的重复值
words = ['hello', 'world', 'there', 'here']
def read_test_data_in_batches():
batch = []
for i in range(10000 * 100):
if i % 50000 == 0:
print(i)
if len(batch) > 10000:
yield batch
batch = []
batch.append({
'_index': 'wentao-test-doc-values',
'_type': 'testdata',
'_source': {'name': random.choice(words)}
})
print(i)
yield batch
磁盘占用是
size: 28.5Mi (28.5Mi)
docs: 1,000,000 (1,000,000)
把每个word搞长一些,同样是插入100万行
words = ['hello' * 100, 'world' * 100, 'there' * 100, 'here' * 100]
def read_test_data_in_batches():
batch = []
for i in range(10000 * 100):
if i % 50000 == 0:
print(i)
if len(batch) > 10000:
yield batch
batch = []
batch.append({
'_index': 'wentao-test-doc-values',
'_type': 'testdata',
'_source': {'name': random.choice(words)}
})
print(i)
yield batch
磁盘占用不升反降
size: 14.4Mi (14.4Mi)
docs: 1,000,000 (1,000,000)
这说明了lucene在底层用列式存储这些字符串的时候是做了压缩的。这个要是在某个商业列式数据库里,就这么点优化都是要大书特书的dictionary encoding优化云云。
Nested Document
实验表明把一堆小文档打包成一个大文档的nested document可以压缩存储空间。把前面的mapping改成这样:
mappings = {
'testdata': {
'_source': {'enabled': False},
'_all': {'enabled': False},
'properties': {
'children': {
'type': 'nested',
'properties': {
'name': {
'type': 'string',
'index': 'no',
'store': False,
'dynamic': 'strict',
'fielddata': {'format': 'doc_values'}
}
}
}
}
}
}
还是插入100万行,但是每一千行打包成一个大文档
words = ['hello', 'world', 'there', 'here']
def read_test_data_in_batches():
batch = []
for i in range(10000 * 100):
if i % 50000 == 0:
print(i)
if len(batch) > 1000:
yield [{
'_index': 'wentao-test-doc-values2',
'_type': 'testdata',
'_source': {'children': batch}
}]
batch = []
batch.append({'name': random.choice(words)})
print(i)
yield [{
'_index': 'wentao-test-doc-values2',
'_type': 'testdata',
'_source': {'children': batch}
}]
磁盘占用是
size: 2.47Mi (2.47Mi)
docs: 1,001,000 (1,001,000)
文档数没有变小,但是磁盘空间仅仅占用了2.47M。这个应该受益于lucene内部对于嵌套文档的存储优化。
Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率的更多相关文章
- ElasticSearch入门 第四篇:使用C#添加和更新文档
这是ElasticSearch 2.4 版本系列的第四篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- 读《深入理解Elasticsearch》点滴-对象类型、嵌套文档、父子关系
一.对象类型 1.mapping定义文件 "title":{ "type":"text" }, "edition":{ ...
- amazon redshift 分析型数据库特点——本质还是列存储
Amazon Redshift 是一种快速且完全托管的 PB 级数据仓库,使您可以使用现有的商业智能工具经济高效地轻松分析您的所有数据.从最低 0.25 USD 每小时 (不承担任何义务) 直到每年每 ...
- 时间序列数据库选型——本质是列存储,B-tree索引,抑或是搜索引擎中的倒排索引
时间序列数据库最多,使用也最广泛.一般人们谈论时间序列数据库的时候指代的就是这一类存储.按照底层技术不同可以划分为三类. 直接基于文件的简单存储:RRD Tool,Graphite Whisper.这 ...
- Druid.io索引过程分析——时间窗,列存储,LSM树,充分利用内存,concise压缩
Druid底层不保存原始数据,而是借鉴了Apache Lucene.Apache Solr以及ElasticSearch等检索引擎的基本做法,对数据按列建立索引,最终转化为Segment,用于存储.查 ...
- OpenTSDB介绍——基于Hbase的分布式的,可伸缩的时间序列数据库,而Hbase本质是列存储
原文链接:http://www.jianshu.com/p/0bafd0168647 OpenTSDB介绍 1.1.OpenTSDB是什么?主要用途是什么? 官方文档这样描述:OpenTSDB is ...
- ELK学习笔记之ElasticSearch的索引详解
0x00 ElasticSearch的索引和MySQL的索引方式对比 Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤.特别是它对多条件的过滤支持非常好,比如年龄 ...
- elasticsearch——海量文档高性能索引系统
elasticsearch elasticsearch是一个高性能高扩展性的索引系统,底层基于apache lucene. 可结合kibana工具进行可视化. 概念: index 索引: 类似SQL中 ...
- 〈二〉ElasticSearch的认识:索引、类型、文档
目录 上节回顾 本节前言 索引index 创建索引 查看索引 查看单个索引 查看所有索引 删除索引 修改索引 修改副本分片数量 关闭索引 索引别名 增加索引别名: 查看索引别名: 删除索引别名: 补充 ...
随机推荐
- 11.Query an Array of Embedded Documents-官方文档摘录
总结 1.插入数据 db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A&qu ...
- 我的Android进阶之旅------>关于使用CSDN-markdown编辑器来编写博客
关于使用MarkDown编辑器的原因 什么是 Markdown 制作一份待办事宜 Todo 列表 书写一个质能守恒公式LaTeX 高亮一段代码code 高效绘制 流程图 高效绘制序列图 绘制表格 更详 ...
- N多条短信,用什么算法从中找出相似内容的来?
创建树,每个字符为一个节点,对于同一位置字符相同的共用一个节点.最后找出具有公共节点的短信.例如:MessageA "hello,world"MessageB "hell ...
- 010-JDK可视化监控工具-VisualVM
一.概述 VisualVM是一个集成多个JDK命令行工具的可视化工具.VisualVM基于NetBeans平台开发,它具备了插件扩展功能的特性,通过插件的扩展,可用于显示虚拟机进程及进程的配置和环境信 ...
- 005-环境安装【docker、fabric】
1.参考地址:https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html#install-curl 一.前置条件和系统配置 1.安 ...
- MariaDB备份之XtraBackup
一.XtraBackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtrabd数据库进行热备的工具.特点: (1)备份过程快速.可靠: ...
- python删除目录下七天前创建的文件
#coding=utf-8 import os import time import datetime def deleteOutdateFiles(path): """ ...
- SQL基础三
一.SQL ORDER BY 子句 ORDER BY 语句用于对结果集进行排序,默认按照升序对记录进行排序,如果需要按照降序进行排序,需要在后面追加关键字DESC.应用如下: 原始的表:Orders表 ...
- NUnit TestFixtureSetup 和 TestFixtureTearDown
TestFixtureSetup 和 TestFixtureTearDown 在所有测试开始前(TestFixtureSetup)或结束后(TestFixtureTearDown)运行一 次.记住他只 ...
- Educational Codeforces Round 11B. Seating On Bus 模拟
地址:http://codeforces.com/contest/660/problem/B 题目: B. Seating On Bus time limit per test 1 second me ...