Ну я по опыту могу сказать, что благодаря, например, spring-data огромное количество кода вообще не нужно писать. Так что да — в большинстве случаев ORM оправдан. Еще и учитывая тот факт, что большинство проектов до прода вообще не доходит.
Мы решали похожую задачу. Есть 200к точек. Нужно найти ближайшую точку для пользователя в заданном радиусе.
Создание дерева 2сек, 30к выборок == 1 сек на моем слабеньком ноуте. Писали на Java, использовали готовое KD-tree. Реализация решения заняла 2 часа.
Нас производительность устраивала, потому не оптимизировали. Но путей для оптимизации там море. Уверен, что вполне можно было бы подобраться к Вашему решению, может как-то выделю время…
Интересно… У меня следующие вопросы:
0) Правильно ли я понял — нагрузку можно создавать из нескольких машин и получать результаты на одной?
1) Какую максимальную нагрузку можно создать с одной машины, например — количество http реквестов в секунду в 1 поток, 100, 500 (можно любую из ваших в пример)?
2) Какое максимальное количество потоков можно создать на одной машине для имитации конкурентных пользователей?
3) Есть ли поддержка https?
Интересно, у нас все это сейчас делается баш скриптами (копирование логов из серверов в hdfs, где начинается обработка). Правда после прочтения я таки не уверен, что оно того стоит, слишком уж сложно выглядит.
Задача очень расплывчата, но это и не важно — Вычитали множество логов, распарсили. Создали мапу, как ключ положили Field_A, значение — лог. Проитерировались по коллекции логов, проверили вхождение в мапе Field_X — если нашли, положили в аутпут.
Если миллион записей — ~500мб на диске, в памяти это займет ~1ГБ. Алгоритму нужно вдвое больше. Вам надо 2 ГБ оперативы. Простой джарник запроцесит такой объем за несколько десятков секунд, а то и меньше в зависимости от железа. В то время как на поднятие хадуп нод уйдет от 5 мин.
Никак. Я профайлил отдельно мап и редюс методы в юнит тестах с продакшн логами. По ним смог определить узкие места нашего кода. Что касается более сложных задач — например, распределения ключей по редюсам, то для этого использовалась мониторилка самого хадупа. По ней четко можно понять где именно проблема и туда уже копать в каждом конкретном случае.
Какой именно, если не секрет? Планируете ли открывать код?
Создание дерева 2сек, 30к выборок == 1 сек на моем слабеньком ноуте. Писали на Java, использовали готовое KD-tree. Реализация решения заняла 2 часа.
Нас производительность устраивала, потому не оптимизировали. Но путей для оптимизации там море. Уверен, что вполне можно было бы подобраться к Вашему решению, может как-то выделю время…
0) Правильно ли я понял — нагрузку можно создавать из нескольких машин и получать результаты на одной?
1) Какую максимальную нагрузку можно создать с одной машины, например — количество http реквестов в секунду в 1 поток, 100, 500 (можно любую из ваших в пример)?
2) Какое максимальное количество потоков можно создать на одной машине для имитации конкурентных пользователей?
3) Есть ли поддержка https?
Если миллион записей — ~500мб на диске, в памяти это займет ~1ГБ. Алгоритму нужно вдвое больше. Вам надо 2 ГБ оперативы. Простой джарник запроцесит такой объем за несколько десятков секунд, а то и меньше в зависимости от железа. В то время как на поднятие хадуп нод уйдет от 5 мин.