Ответ Мэтта Шеппарда великолепен (мод), но я бы учел эти факторы, когда думал о шпинделе:
- Структура: она явно разбивается на куски, или вы делаете компромиссы?
- Использование: как данные будут проанализированы / извлечены / обработаны?
- Срок службы: как долго полезны данные?
- Размер: сколько там данных?
Одно особое преимущество CSV-файлов перед RDBMS заключается в том, что их можно легко уплотнить и перемещать практически на любую другую машину. Мы осуществляем передачу больших объемов данных, и все достаточно просто, мы просто используем один большой файл CSV и легко пишем с помощью таких инструментов, как rsync. Чтобы уменьшить количество повторений в больших CSV-файлах, вы можете использовать что-то вроде YAML . Я не уверен, что буду хранить что-либо вроде JSON или XML, если только у вас не будет существенных требований к отношениям.
Что касается не упомянутых альтернатив, не стоит сбрасывать со счетов Hadoop , который представляет собой реализацию MapReduce с открытым исходным кодом. Это должно хорошо работать, если у вас есть тонна свободно структурированных данных, которые необходимо проанализировать, и вы хотите оказаться в сценарии, когда вы можете просто добавить еще 10 машин для обработки данных.
Например, я начал пытаться анализировать производительность, которая по существу представляла собой все временные числа различных функций, зарегистрированных на 20 машинах. После попытки вставить все в СУБД, я понял, что мне действительно не нужно снова запрашивать данные после их агрегирования. И это полезно только в агрегированном формате для меня. Поэтому я сохраняю файлы журналов, сжимаю их и оставляю агрегированные данные в БД.
Примечание Я более привык думать о "больших" размерах.