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