для большого массива данных, речь про миллиарды записей(на данный момент 200млн).
Это никакие не "большие данные".
Для современного железа и современного СУБД - это ерунда.
Стандартные решения на таких объемах начинают деградировать по скорости вставки/чтения(очень важно).
Для чтения - индексы.
Для вставки - bulk loading
Приемлемое время отклика до 20 сек, конечно чем быстрее - тем лучше.
Это троллинг?
Или вы нам пишете из 1960 годов?
Данные хранятся в одном ЦОДе. Сейчас 10-50 запросов/сек. В ближайщем будующем около 100запр/сек.
Это не нагрузка вообще. Смешно.
В данный момент используется MongoDB. Стурктура данных выглядит след образом(буду писать в терминах монги) - документе порядка 80 полей, с типом string, datetime, int, float, null, boolean. У записи есть уникальный ключ, с типом string(длиной в 30 символов). Поиск осуществляется по 30 полям и их возможным комбинациям. Необходимо читать в режиме реалтайм и делать всевозможные агрегационные операции с данными. На таких данных очень долго выполняется операция count.
Индексы.
А для агрегаций - подготовленные данные использовать. Count - всегда медленно, поскольку это полный перебор. Считать заранее, сохранять во вспомогательных данных.
Смысла нет использовать MongoDB, если только вы не собираетесь это по огромному кластеру размазывать. Там и будет преимущество Монги.
На 1-2-3 серверах классические реляционные СУБД типа PostgreSQL имеют преимущество перед Mongo.
Поиск осуществляется по 30 полям и их возможным комбинациям
Индексы по полям и комбинациям.
См. план запроса чтобы понять какие именно индексы нужны.