21 个版本
0.5.5 | 2024年6月8日 |
---|---|
0.5.3 | 2024年5月14日 |
0.4.2 | 2024年3月31日 |
0.3.4 | 2020年7月4日 |
0.2.1 | 2019年2月17日 |
#155 在 数据库接口 中
每月 48 次下载
2.5MB
36K SLoC
LocustDB
一个实验性分析数据库,旨在为通用硬件上的查询性能和存储效率设定新的标准。有关当前功能概述,请参阅如何在单台台式机上每秒分析数十亿条记录 和 如何从单个磁盘每秒读取数千万条记录。
使用方法
下载最新的二进制发行版,它可以在大多数 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 应该可以以最小的配置或模式设置即可使用,作为
- 一个高度可用的分布式分析系统,持续摄取数据并执行查询
- 一个用于加载和分析 CSV 文件的命令行工具/repl
- 一个嵌入在其他 Rust 程序中的数据库/查询引擎,通过 cargo 实现
非目标
在 LocustDB 准备好投入生产之前,这些目标最多只是分心,如果不是与主要目标完全不相符的话。
强一致性保证和持久性
- 在摄入过程中可能会丢失少量数据
- 当节点不可用时,查询可能返回不完整的结果
- 查询返回的结果可能不代表一致的快照
高 QPS
LocustDB 不会高效地执行插入或操作少量数据的查询。
完全支持 SQL
- 所有数据都是追加的,只能批量删除/过期。
- LocustDB 不支持每个节点无法独立评估的查询(大型连接,复杂子查询,精确集合大小,精确 top 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
依赖关系
~84MB
~1.5M SLoC