Храните миллиарды строк без связи

Я собираюсь ежедневно получать большую группу CSV-файлов. Кроме того, у меня есть 1 миллиард записей данных (из этих CSV-файлов), но это не фиксированное число (1b записей ежедневно). Они будут расти, и мне нужно хранить их в БД. Также есть дополнительные моменты:

  1. Нет обновлений
  2. Там нет соединения и отношений
  3. Выберите несколько строк и сгруппируйте по
  4. Интенсивная запись — это больше, чем чтение
  5. Мне не нужна нормализация

У меня была скамья между MySQL InnoDB и MyISAM. MyISAM был лучше, чем InnoDB (потому что у меня нет нормализации), но MySQL не является хорошим подходом, потому что у меня нет отношения.

Я также проверил MongoDB, но с 50 ГБ данных CSV он использовал 150 ГБ хранилища!

Я знаю, что могу использовать файлы CSV, но мне нужен подход к базе данных. База данных имеет множество инструментов (например, простые запросы GROUP BY) и преимущества, такие как обновления, исправления ошибок, средства безопасности, производительность чтения и записи, репликация и т. д.

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

Я использую Linux (CentOS).

На какой ОС он работает? Что вы готовы заплатить? Пожалуйста , отредактируйте свой вопрос и примите во внимание комментарий Томаса.
Я постоянно поражаюсь тому, как плохо люди читают. Вам задали несколько вопросов и вы пропустили один.
Независимо от того, какой инструмент вы используете, у вас могут быть действительно большие отдельные файлы. Будет ли ваша ОС обрабатывать эти огромные файлы? Это 64-битная ОС? Это звучит как интересный проект. Интересно, сколько времени займет выбор 10 миллиардов записей.
@Bulrush, да, это 64. Но я думаю, что ввод-вывод медленнее, чем база данных. и некоторые инструменты могут помочь в огромном наборе данных.
@Масуд. Как вы думаете, почему доступ к базе данных с одной таблицей медленнее, если у вас даже нет ни одного соединения или связи с другой таблицей? Базы данных супероптимизированы для фильтрации и выбора данных, а отсутствие отношений означает, что в этом случае они работают еще быстрее.
@Bulrush Итак, я думаю, что базы данных SQL фокусируются на отношении, а базы данных NoSQL фокусируются на структуре с меньшим отношением (или без отношения).

Ответы (2)

Раньше я управлял такой информацией.

Я использовал PostgreSQL, где у вас есть преимущество реляционной базы данных и Nosql.
Вы можете хранить в одной записи нормализованные данные, такие как данные импорта, идентификатор и т. д., а также массив, json или даже Hstore.

Плюс: у него есть родное сжатие.

Спасибо, но мне не нужна нормализация. PostgreSQL является реляционным, поскольку я сказал, что не имею отношения.
@MasoodAfrashteh Я недоучился. Вы можете использовать Postgresql без нормализации. Postgresql поддерживает неструктурированные данные. Вы хотите сохранить одну запись на строку CSV. Нет проблем, вы можете сохранить ее в чистом виде или разделить на массив текста. Или json, это неструктурированные данные с реальной стабильной базой данных (даже быстрее, чем монго на своем поле).

Я бы предложил использовать Pandas с информацией .csv, преобразованной в формат HDF5, вероятно, самой Pandas. HDF5 обычно быстрее, чем звездообразная схема SQL.

Не сама база данных Pandas включает быстрый поиск, выбор, изменение формы, группировку и т. д. и может взаимодействовать с большим количеством баз данных.

Pandas является бесплатным, бесплатным и открытым исходным кодом, и активно поддерживается. Он взаимодействует с такими инструментами, как ipython, jupyter, matplotlib и т. д., для улучшения обработки и визуализации данных.