Большая база данных 500 миллионов записей - PullRequest
3 голосов
/ 17 мая 2011

Решением одной из наших бизнес-задач было бы сохранение около 500 миллионов записей в базе данных. Каждая запись будет иметь от 40 до 50 столбцов.

У меня есть текстовый файл, содержащий все эти данные, и он составляет около 150 ГБ. (третья часть моего жесткого диска)

Если бы я должен был (как-то) загрузить все эти данные в БД (ORACLE?), Насколько хорошо он работал бы?

Мой коллега настаивает на том, что все будет в порядке. И я мог бы даже проиндексировать все от 40 до 50 столбцов, и тогда нужно написать несколько sql для вывода данных.

он прав? или 500 дБ - это слишком много для БД?

p.s. Просто добавьте больше информации после нескольких очень хороших ответов: От 40 до 50 столбцов будут содержать небольшие строки и / или числа. Для небольших строк я предполагаю что-то меньше, чем 64 символа.

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Без какой-либо информации о используемой вами СУБД, ее размещении и типах данных (большой текст, небольшие числа и т. Д.) Получить точный ответ непросто.

Чистое количество записей не должно быть проблемой, почти каждая современная СУБД легко справится с 500 миллионами записей и более.

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

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

Вот несколько ссылок SO, которые могут помочь вам в дальнейшем:

2 голосов
/ 17 мая 2011

Ваш коллега прав: 500M записей в БД - это хорошо, я использовал БД с 2G строками, и это было 10 лет назад. Проблема индексации каждого столбца - индексы будут замедлять вставку каждой новой записи, а создание индексов займет много времени. Вы должны определить, какие типы запросов вы будете выполнять, и затем соответствующим образом проиндексировать. При таком количестве записей вы можете получить преимущества за счет нормализации данных - плоская структура часто быстрее, но если у вас есть повторяющиеся длинные текстовые поля, то замена их поисками может дать преимущества для хранения и индексации. Не видя данных, трудно дать более точный совет.

Кстати, если вы работаете с тестами производительности, вы также можете разделить данные на физически отдельные таблицы, возможно, по годам?

Мой следующий шаг (после того, как вы выбрали платформу БД и нашли сервер), загрузите данные и посмотрите, как они работают. Я бы посмотрел на Массовую загрузку ваших данных - я Sql Server, так что Integration Services - это путь. Я бы удостоверился, что у вас есть один уникальный ключ, и если его нет в данных, добавьте столбец идентификаторов. Тогда вы готовы проверить это. SqlExpress бесплатен, поставляется с SSIS, но может работать только с 10 ГБ БД - но этого достаточно, чтобы ознакомиться с проблемами.

Я регулярно выполняю массовую загрузку таблицы строк 4M с 50+ столбцами, и это занимает около 2 минут. Я с радостью переведу это в автономный режим, если вы хотите получить еще один совет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...