Назад | Перейти на главную страницу

Хранение сотен миллионов записей

Моя компания получит набор данных, состоящий примерно из 200–300 миллионов записей. Исходный материал - csv, без сжатия - около 150 ГБ. Нам нужно будет выполнить первоначальную загрузку данных, а затем ежедневно обновлять примерно 1% записей. Мы также хотели бы иметь возможность хранить историю каждой записи.

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

Мы определенно могли бы обойтись без нормализации данных, и я могу представить себе распространение информации по множеству серверов. Как насчет MongoDB или другого нетрадиционного хранилища данных?

Есть ли у кого-нибудь мысли о возможности такого рода начинаний? Я ценю любую помощь, которую вы можете оказать.

Мой опыт работы с наборами данных такого размера ограничен MSSQL, но он наиболее точно может обрабатывать данные такого размера.

Меня прежде всего беспокоит размер данных. 300 миллионов записей на 150 ГБ - это примерно 500 КБ на строку - и это большая строка. Очень-очень большой ряд. Если вы можете нормализовать до 3-й нормальной формы, это может существенно помочь (при условии, что есть данные, которые можно нормализовать). Если вы не собираетесь нормализовать (а просто имеете одну массивную таблицу), то движок, поддерживающий ISAM, будет быстрее, чем СУБД, поэтому MySQL в режиме ISAM - очевидный выбор по сравнению с MSSQL (извините, я не у меня нет опыта работы с Postgre или Mongo)

Тем не менее, MSSQL может обрабатывать таблицу такого размера, не беспокойтесь. Он может разделять данные так, чтобы разные части располагались на разных дисках, поэтому вы можете хранить 1% обновленных данных на быстром диске и хранить остальные на более медленном диске, если бюджет является проблемой. Если выбранная вами СУБД поддерживает это, это может быть разумным решением.

Для справки: однажды я управлял базой данных, в которой было около 200 миллионов строк в одной таблице (но размер таблицы составлял всего 20 ГБ), а время запросов с интеллектуальной индексацией все еще измерялось в миллисекундах. Это было нормализовано до 3-й нормальной формы, поэтому было много LOJ для получения связанных данных.

Большинство баз данных могут легко управлять хранилищем таких больших объемов, это действительно зависит от того, что вы хотите делать с данными после их загрузки. Является ли он транзакционным, поэтому он будет часто запрашиваться и обновляться? Или это больше для отчетов, когда из транзакционной системы ежедневно поступает только новая информация?