3个不稳定版本
0.2.1 | 2024年5月5日 |
---|---|
0.2.0 | 2024年3月31日 |
0.1.0 | 2018年12月31日 |
#15 in #快速
在 locustdb 中使用
37KB
715 行
LocustDB
一个旨在在通用硬件上设定查询性能和存储效率新标准的实验性分析数据库。请参阅 如何在单台台式机上每秒分析数十亿条记录 和 如何从单个磁盘每秒读取数亿条记录 以了解当前功能概述。
使用方法
下载最新的二进制发布版本 locustdb-0.1.0-alpha-x64-linux.0-alpha,它可以在大多数x64 Linux系统上通过命令行运行,包括Windows Subsystem for Linux。例如,要加载此存储库中的文件 test_data/nyc-taxi.csv.gz
并启动repl运行
./locustdb --load test_data/nyc-taxi.csv.gz --trips
当使用 --load
加载 .csv
或 .csv.gz
文件时,假设每个文件的第一个行是包含所有列名的标题行。每列的类型将被自动推导,但对于包含数字/字符串/空条目的混合列,这可能会失败。
要将数据持久化到LocustDB的内部存储格式(允许在初始加载后从磁盘快速查询)中,请使用 --db-path
指定存储位置。在创建/打开持久数据库时,LocustDB会打开很多文件,如果打开文件的数量限制太低,可能会崩溃。在Linux上,您可以使用 ulimit -n
检查当前限制,并使用例如 ulimit -n 4096
设置新限制。
--trips
标志将配置用于加载14.6亿条出租车行程数据集的摄取模式,数据集可以在此处下载:下载链接。
对于更多信息,使用 --help
命令。
$ ./locustdb --help
LocustDB 0.2.1
Clemens Winter <[email protected]>
Massively parallel, high performance analytics database that will rapidly devour all of your data.
USAGE:
locustdb [FLAGS] [OPTIONS]
FLAGS:
-h, --help Prints help information
--mem-lz4 Keep data cached in memory lz4 encoded. Decreases memory usage and query speeds.
--reduced-trips Set ingestion schema for select set of columns from nyc taxi ride dataset
--seq-disk-read Improves performance on HDD, can hurt performance on SSD.
--trips Set ingestion schema for nyc taxi ride dataset
-V, --version Prints version information
OPTIONS:
--db-path <PATH> Path to data directory
--load <FILES> Load .csv or .csv.gz files into the database
--mem-limit-tables <GB> Limit for in-memory size of tables in GiB [default: 8]
--partition-size <ROWS> Number of rows per partition when loading new data [default: 65536]
--readahead <MB> How much data to load at a time when reading from disk during queries in MiB
[default: 256]
--schema <SCHEMA> Comma separated list specifying the types and (optionally) names of all columns in
files specified by `--load` option.
Valid types: `s`, `string`, `i`, `integer`, `ns` (nullable string), `ni` (nullable
integer)
Example schema without column names: `int,string,string,string,int`
Example schema with column names: `name:s,age:i,country:s`
--table <NAME> Name for the table populated with --load [default: default]
--threads <INTEGER> Number of worker threads. [default: number of cores (12)]
目标
LocustDB的愿景。
快速
在通用硬件上,LocustDB在查询性能方面处于领先地位,无论是缓存内存中的数据还是从磁盘读取的数据。
成本低效
LocustDB自动实现惊人的压缩比率,具有最小的索引开销,并且存储相同数量的数据比任何其他系统都需要更少的机器。性能与存储效率之间的权衡是可配置的。
低延迟
新数据在几秒内即可供查询使用。
可扩展
LocustDB可以从单机无缝扩展到大型集群。
灵活易用
LocustDB应该可以最小化配置或模式设置即可使用,作为
- 一个高度可用的分布式分析系统,持续摄取数据并执行查询
- 一个用于从CSV文件加载数据和分析数据的命令行工具/REPL
- 一个嵌入式数据库/查询引擎,通过cargo包含在其他Rust程序中
非目标
在LocustDB准备好投入生产之前,这些都是次要的,甚至可能与主要目标完全不一致。
强一致性保证和持久性保证
- 在摄取过程中可能会丢失少量数据
- 当节点不可用时,查询可能会返回不完整的结果
- 查询返回的结果可能不代表一致的快照
高QPS
LocustDB在处理少量数据插入或操作时执行查询的效率不高。
完整SQL支持
- 所有数据都是追加的,并且只能以批量方式删除/过期。
- LocustDB不支持每个节点无法独立评估的查询(大型连接,复杂子查询,精确的集合大小,精确的前N个)。
支持成本效率低或专用硬件
LocustDB无法在GPU上运行。
从源码编译
- 安装Rust: rustup.rs
- 克隆仓库
git clone https://github.com/cswinter/LocustDB.git
cd LocustDB
- 使用
--release
进行编译以获得最佳性能
cargo run --release --bin repl -- --load test_data/nyc-taxi.csv.gz --reduced-trips
运行测试或基准测试
cargotest
cargobench
依赖关系
~3.5–4.5MB
~90K SLoC