Коротко о проблеме:
- Существует огромное количество входных данных в формате JSON. Например, сейчас он составляет около 1 ТБ, но он будет расти. Мне сказали, что у нас будет кластер.
- Мне нужно обработать эти данные, сделать из них график и сохранить в базе данных. Поэтому каждый раз, когда я получаю новый JSON, мне приходится просматривать весь граф в базе данных, чтобы завершить его.
- Позже у меня будет тонкий клиент в браузере, где я буду визуализировать некоторые части графика, искать в нем, проходить по нему, делать некоторую фильтрацию и т. д. Так что эта система не является высоконагруженной, просто много обработки и данных.
У меня нет опыта работы с распределенными системами, базами данных NoSQL и прочими подобными "большими данными". Во время своего небольшого исследования я обнаружил, что их слишком много, и сейчас я просто потерян.
Что у меня есть на доске на данный момент:
- GraphX (GraphFrames) Apache Spark для распределенных вычислений поверх некоторого хранилища (HDFS, Cassanda, HBase,...) и процессора (Yarn, Mesos, Kubernetes,...).
- Некоторая графовая база данных. Я думаю, хорошо использовать язык запросов графа, такой как Cipher в neo4j или Gremlin в JanusGraph/TitanDB. Neo4j хорош, но у него кластеризация только в EE и мне нужно что-то с открытым исходным кодом. Так что теперь я думаю о последних, у которых по умолчанию есть Gremlin + Cassandra + Elasticsearch.
- Может быть, мне ничего из этого не нужно, просто сохраните график как матрицу смежности в какой-нибудь СУБД, такой как Postgres, и все.
- Не знаю, нужен ли мне Spark во 2 или 3. Нужен ли он вообще?
Мой начальник сказал мне проверить Elasticsearch. Но я думаю, что могу использовать его только как дополнительный полнотекстовый поисковик.
Спасибо за любой ответ!