Я работаю над созданием высокоуровневого веб-приложения со следующими характеристиками:
- Миллионы записей
- Сильно проиндексирован / доступен для поиска по различным критериям
- переменная схема документа
- Регулярные обновления в блоках по 10K - 200K записей одновременно
- Данные должны оставаться высокодоступными во время обновлений
- Должен эффективно масштабироваться горизонтально
Сегодня это приложение существует в MySQL, и мы страдаем от нескольких огромных проблем, в частности, из-за того, что его сложно адаптировать к гибкой схеме, и что крупные массовые обновления блокируют данные на 10-15 секунд за раз, что недопустимо , Некоторые из этих вещей могут быть решены путем улучшения проектирования баз данных в контексте MySQL, однако я ищу лучшее решение «следующего поколения».
Я никогда не использовал MongoDB, но его набор функций, казалось, наиболее близко соответствовал тому, что я ищу, так что это было моей первой областью интереса. У меня есть некоторые вещи, которые меня волнуют, такие как разбиение данных, возможность находить-обновлять-возвращать в одном выражении и, конечно, гибкость схемы NoSQL.
В MongoDB есть две вещи, в которых я не уверен:
Я не могу найти твердое тело
информация о параллелизме
обновления с большими наборами данных (см. мой
используйте случай выше), поэтому у меня есть жесткий
время понять, как это может
выполнять.
Мне нужен открытый текстовый поиск
Это второе требование привело меня к Lucene (или, возможно, к Solr, если я оставил его внешним) в качестве магазина поиска. Я прочитал несколько случаев, когда Lucene использовался полностью вместо базы данных NoSQL, такой как MongoDB, что заставило меня задуматься, не усложняю ли я вещи, пытаясь использовать оба в одном приложении - возможно, я должен просто хранить все напрямую в Lucene и запустить его так?
Учитывая вышеприведенные требования, кажется ли, что комбинация MongoDB и Lucene сделает эту работу эффективной? Если нет, то может быть лучше попытаться заняться этим целиком в Lucene?