Чтение огромного файла и запись в СУБД

У меня есть огромный текстовый файл, который постоянно добавляется из общего места, которое мне нужно читать построчно из моего java-приложения и обновлять в SQL RDBMS, чтобы в случае сбоя java-приложения оно должно начинаться с того места, где оно осталось, а не с самого начала.

это обычный текстовый файл. Каждая строка будет содержать:
<Datatimestamp> <service name> <paymentType> <success/failure> <session ID>

Кроме того, данные, извлекаемые из базы данных, также должны быть в режиме реального времени без каких-либо проблем с производительностью, доступностью или доступностью в веб-приложении.

Вот мой подход: разверните приложение в двух системных блоках, каждый из которых содержит пульс, который пингует другую систему на предмет доступности службы. Когда вы получаете успешный ответ на сердцебиение, вы также получаете метку времени, которая была последней успешно считанной. В случае сбоя следующего отклика пульса приложение в другой системе может взять на себя управление на основе: 1. неудачного ответа 2. последней успешной отметки времени.

Кроме того, поскольку потребность в поиске данных возникает в реальном времени, а данные огромны, могу ли я сканировать базу данных, помещая ее в поиск Solr или Elastic для более быстрого поиска вместо выполнения вызовов базы данных?

Есть разные способы сделать это, как лучше.


person Ajay    schedule 16.12.2019    source источник
comment
Вы помещаете содержимое файла в одну запись в базе данных или отдельные строки в таблице? Даже без сбалансированных систем вы могли бы просто реализовать метод, при котором при запуске вы проверяете, находится ли файл в той же точке, что и БД, и если нет, начинаете читать записи (поскольку я предполагаю, что ваше приложение не будет слишком долго недоступно ?)   -  person Steven De Groote    schedule 16.12.2019
comment
Это будут отдельные строки в таблице.   -  person Ajay    schedule 16.12.2019
comment
вопрос не детализирует желаемый результат в реальном времени. это отчет? веб приложение? ОЛАП? какие?   -  person Sharon Ben Asher    schedule 16.12.2019
comment
если вы довольны использованием базы данных NoSQL, зачем использовать СУБД в качестве посредника? вы можете вставить из файла непосредственно в базу данных NoSQL   -  person Sharon Ben Asher    schedule 16.12.2019
comment
что огромное? РСУБД может легко обрабатывать таблицы, содержащие до 1 миллиарда строк. каковы требования к извлечению? (критерии поиска) это поиск только по полям равным значениям? текстовый поиск есть? обычное выражение? вам нужно будет сканировать строки и агрегировать (сумма, среднее), все это должно учитываться при выборе СУБД и клиентского приложения   -  person Sharon Ben Asher    schedule 16.12.2019
comment
поиск по времени данных или по полю или регулярному выражению.   -  person Ajay    schedule 16.12.2019


Ответы (2)


Я бы поместил систему обмена сообщениями между текстовым файлом и приложениями для записи БД. (например, RabbitMQ), в этом случае система обмена сообщениями работает как очередь. одно приложение постоянно читает файл и вставляет строки в виде сообщений брокеру. с другой стороны, несколько «приложений для записи БД» могут читать из очереди и записывать в БД.

Преимуществом системы обмена сообщениями является поддержка чтения из очереди несколькими клиентами. система обмена сообщениями заботится о синхронизации между клиентами, обработке ошибок, недоставленных писем и т. д. клиентам все равно, какая полезная нагрузка была обработана другими экземплярами.

относительно поддержки нескольких экземпляров «приложений для записи БД»: я бы выбрал готовые кластерные решения. возможно, кластер докеров, управляемый kubernates?

другой жизнеспособной альтернативой является потоковая платформа, такая как Apache Kafka.

person Sharon Ben Asher    schedule 16.12.2019
comment
как это позаботится об извлечении данных, наконец, из базы данных в режиме реального времени. - person Ajay; 16.12.2019
comment
Но обязательно настройте Kafka ровно на одну доставку, иначе ваши записи могут дублироваться в БД, если у вас несколько приложений для письма. - person Steven De Groote; 16.12.2019
comment
каковы требования к поиску данных? каков желаемый результат? это отчет? OLAP? веб приложение? - person Sharon Ben Asher; 16.12.2019
comment
веб приложение. Конечный пользователь должен иметь возможность выбрать отметку времени. - person Ajay; 16.12.2019
comment
так в чем проблема использовать обычное веб-приложение? РСУБД обеспечивает согласованность данных. - person Sharon Ben Asher; 16.12.2019

Вы можете использовать такое программное обеспечение, как FileBeat, чтобы прочитать файл и направить вывод filebeat в RabbitMQ или Kafka. Оттуда программа Java может подписаться/использовать данные и поместить их в систему СУБД.

person Mohit Mutha    schedule 16.12.2019