如何使用RxJava进行文件解析和SQL生成?
How to use RxJava for file parsing and SQL generation?
我看到的大多数 RxJava 示例都与网络调用有关。我是该框架的新手,所以我想知道将它用于并行文件解析之类的东西是否也有意义。我有一个文件目录,我需要将其数据解析为 SQL tables。 我可以用 RxJava 做到这一点吗?我希望它尽可能多线程以提高效率。
数据说明
我的数据具有层次结构,以一堆 部分 开头。每个节包含一个或多个小节。每个小节包含一个或多个HTML个文件。
SQL 表格
sqlite> SELECT * FROM sections;
_id ordinal title
---------- ---------- ----------
1 1 Management
2 2 Emergency Preparedness
-- 有一个引用部分 table
的外键
sqlite> SELECT * FROM subsections;
_id ordinal chapter_id title
---------- ---------- ---------- ----------
1 A 1 General
2 B 1 Resources
-- 具有引用部分和子部分的外键 table
sqlite> SELECT * FROM html;
_id chapter_id subsection_id number html_filename
---------- ---------- ---------- ---------- --------------
1 1 1 1 /1a-1.html
2 1 1 2 /1a-2.html
3 1 1 3 /1a-3.html
4 1 1 4 /1a-4.html
5 1 2 1 /1b-1.html
6 2 2 1 /2a-1.html
7 2 2 2 /2a-2.html
8 2 2 1 /2b-1.html
_id字段是一个自动递增的主键(这不会每次都匹配序号)。 subsections table 取决于接收其相关部分的主键。意思是一旦 Section 1 被插入,Sections 1a, 1b, 1c,等可以插入(但不能插入2a)
目录结构
//Section 1
/1.title
//Subsection A
/1a.title
//html files for 1a
/1a-1.html
/1a-2.html
//Subsection B
/1b.title
//html files for 1b
/1b-1.html
/1b-2.html
//Section 2
/2.title
/2a.title
//..etc
每个 SQL 插入都可以用 java 构建器 class 构建,对于 /1b-2.html看起来像这样
db.insert(HTML_TABLE, null, new HTML.Builder()
.chapterId(section1)
.letterId(subsectionB)
.number(2)
.build());
我最终会有大约 50-60 个部分,但是每个 SQL 插入整个部分、其子部分及其 HTML 文件可以并行插入。使用 RxJava 对这样的事情有意义吗?
Rx(在任何平台上)不太适合大多数形式的并行处理。它处理本质上是序列化的流。听起来您正在寻找某种 ETL 工具。
我看到的大多数 RxJava 示例都与网络调用有关。我是该框架的新手,所以我想知道将它用于并行文件解析之类的东西是否也有意义。我有一个文件目录,我需要将其数据解析为 SQL tables。 我可以用 RxJava 做到这一点吗?我希望它尽可能多线程以提高效率。
数据说明
我的数据具有层次结构,以一堆 部分 开头。每个节包含一个或多个小节。每个小节包含一个或多个HTML个文件。
SQL 表格
sqlite> SELECT * FROM sections;
_id ordinal title
---------- ---------- ----------
1 1 Management
2 2 Emergency Preparedness
-- 有一个引用部分 table
的外键sqlite> SELECT * FROM subsections;
_id ordinal chapter_id title
---------- ---------- ---------- ----------
1 A 1 General
2 B 1 Resources
-- 具有引用部分和子部分的外键 table
sqlite> SELECT * FROM html;
_id chapter_id subsection_id number html_filename
---------- ---------- ---------- ---------- --------------
1 1 1 1 /1a-1.html
2 1 1 2 /1a-2.html
3 1 1 3 /1a-3.html
4 1 1 4 /1a-4.html
5 1 2 1 /1b-1.html
6 2 2 1 /2a-1.html
7 2 2 2 /2a-2.html
8 2 2 1 /2b-1.html
_id字段是一个自动递增的主键(这不会每次都匹配序号)。 subsections table 取决于接收其相关部分的主键。意思是一旦 Section 1 被插入,Sections 1a, 1b, 1c,等可以插入(但不能插入2a)
目录结构
//Section 1
/1.title
//Subsection A
/1a.title
//html files for 1a
/1a-1.html
/1a-2.html
//Subsection B
/1b.title
//html files for 1b
/1b-1.html
/1b-2.html
//Section 2
/2.title
/2a.title
//..etc
每个 SQL 插入都可以用 java 构建器 class 构建,对于 /1b-2.html看起来像这样
db.insert(HTML_TABLE, null, new HTML.Builder()
.chapterId(section1)
.letterId(subsectionB)
.number(2)
.build());
我最终会有大约 50-60 个部分,但是每个 SQL 插入整个部分、其子部分及其 HTML 文件可以并行插入。使用 RxJava 对这样的事情有意义吗?
Rx(在任何平台上)不太适合大多数形式的并行处理。它处理本质上是序列化的流。听起来您正在寻找某种 ETL 工具。