Show HN: Samchika – A Java Library for Fast, Multithreaded File Processing
**Samchika** 是一个 Java 库,专为快速、多线程的文件处理设计。它专注于并行处理,尤其适用于处理大型文本文件,如日志和数据集。主要特性包括完全多线程、简单的 API 和可选的运行时统计信息。该库在日志分析、ETL 操作、批量报告生成等场景中表现出色。通过使用 **Samchika**,可以显著提升性能,尤其是在多核系统上,并提供可管理的内存使用。该库基于 MIT License 开源,欢迎贡献。
Show HN: Samchika - 用于快速多线程文件处理的 Java 库
Samchika(梵语中意为“文件”)是一个 可重用、易于使用 且 极其快速 的 Java 文件处理库。
它非常注重 多线程,可以并行处理 CPU 密集型文件处理任务,即使对于海量文件也能实现高性能。
🚀 特性
- 🔁 完全多线程 – 针对并行文件处理进行了优化。
- 🧩 简单 API – 只需插入文件路径和逻辑即可。
- 📊 可选的运行时统计信息 – 耗时、内存使用情况、线程级别信息。
- 🧪 非常适合处理和分析大型文本文件(例如日志、数据集)。
- 🌍 对开源友好 – 欢迎贡献!
用例
在以下情况下,Samchika 在多线程文件处理能提供显著优势的场景中表现出色:
- 日志分析和处理
- ETL (Extract, Transform, Load) 操作
- 大型文本语料库处理
- 批量报告生成
- 数据转换管道
- 实时数据处理
有关这些用例的详细实现,请参见 examples
目录。
快速示例
// Transform a large CSV file with optimal performance
SmartFileProcessor.builder()
.inputPath("large_dataset.csv")
.outputPath("transformed_dataset.csv")
.batchSize(10000)
.lineProcessor(line -> line.toUpperCase())
.displayStats(true)
.build()
.execute();
📦 安装
Maven
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.mayankpratap</groupId>
<artifactId>samchika</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
Gradle
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.mayankpratap:samchika:1.0.0'
}
🛠️ 如何使用
步骤 1:导入库
import com.samchika.SmartFileProcessor;
步骤 2:客户端代码
public static void main(String[] args) {
SmartFileProcessor processor = SmartFileProcessor.builder()
.inputPath("input.txt") // Path to the file to be processed
.outputPath("output.txt") // Path to write the output
.lineProcessor(Main::processLine) // Your business logic per line
.displayStats(true) // Optional: display runtime stats
.build();
processor.execute();
}
📈 性能
针对基于朴素 BufferedReader
实现的各种大小的文件进行了基准测试:
✅ 200 MB ✅ 1 GB ✅ 5 GB ✅ 16 GB
观察到显著的性能提升,尤其是在多核系统中(性能提升超过 70%)。
随着输入文件大小的增加,与朴素代码相比,节省的时间增益也随之提高。此外,即使对于大型文件(16GB),内存使用也是可管理的(约 800 MB),从而实现了巨大的性能提升。
License
该库在 MIT License 下发布,这意味着您可以自由使用、修改和分发它,即使在商业应用中也是如此。我们只要求您在库的任何副本或其大部分内容中包含原始版权声明和许可文本。
💡 灵感
这个项目灵感来源于:
- Shubham Maurya ( https://github.com/complex1 ),一位亲爱的朋友,他发布了一个 JavaScript 库——这激发了我用 Java 做类似事情的动力。
- 一篇 LinkedIn 帖子讨论了处理大型文本文件的挑战——这让我产生了用优雅的 API 和快速的多线程架构来解决它的想法。
关于
用于 Java 的快速轻量级多线程文件处理库。