Как использовать RxJava для разбора файлов и генерации SQL?

Большинство примеров RxJava, которые я вижу, связаны с сетевыми вызовами. Я новичок в этой среде, поэтому мне интересно, имеет ли смысл использовать ее для чего-то вроде параллельного анализа файлов. У меня есть каталог файлов, данные которых мне нужно разобрать в таблицы SQL. Могу ли я сделать это с помощью RxJava? Я бы хотел, чтобы он был как можно более многопоточным для повышения эффективности.

Описание данных

Мои данные имеют иерархическую структуру, которая начинается с набора разделов. Каждый раздел содержит один или несколько подразделов. Каждый подраздел содержит один или несколько файлов HTML.

Таблицы SQL

sqlite> SELECT * FROM sections;
_id         ordinal     title     
----------  ----------  ----------
1           1           Management
2           2           Emergency Preparedness 

-- имеет внешний ключ, ссылающийся на таблицу разделов

sqlite> SELECT * FROM subsections;
_id         ordinal     chapter_id  title     
----------  ----------  ----------  ----------
1           A           1           General   
2           B           1           Resources

-- имеет внешние ключи, которые ссылаются на таблицу разделов и подразделов

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 зависит от получения первичного ключа для соответствующего раздела. Это означает, что после вставки раздела 1 можно вставлять разделы 1a, 1b, 1c и т. д. (но не )

Структура каталогов

      //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, который для /1b-2.html будет выглядеть так:

db.insert(HTML_TABLE, null, new HTML.Builder()
                .chapterId(section1)
                .letterId(subsectionB)
                .number(2)
                .build());

В итоге у меня будет около 50-60 разделов, но каждая SQL-вставка целого раздела, его подразделов и их HTML-файлов может быть вставлена ​​параллельно. Имеет ли смысл использовать RxJava для чего-то подобного?


person ZakTaccardi    schedule 09.03.2015    source источник


Ответы (1)


Rx (на любой платформе) плохо подходит для большинства форм параллельной обработки. Он имеет дело с потоками, которые по своей сути сериализованы. Похоже, вы ищете какой-то инструмент ETL.

person James World    schedule 09.03.2015
comment
Есть ли у вас какие-либо предложения о том, как лучше всего это сделать? В настоящее время я могу сделать это в гиганте для каждого цикла, но он однопоточный (boo :(). - person ZakTaccardi; 09.03.2015
comment
Много, если вы хотите использовать .NET, но не так много для Java, я боюсь... :( - person James World; 09.03.2015