Наша страховая компания только что отправила нам данные о потенциальных клиентах.Есть 9 миллионов строк.Строки состоят из LeadID (guid), RawLeadXML (xml - возможно, максимум 3-4 КБ) и LeadStatusID (int).
Сначала я попытался добавить целое число автономного номера и сделать его первичным ключом этогоТаблица.Ну, он добавил поле, но не смог сделать его первичным ключом (Недостаточно памяти в пуле буферов.)
Что мне нужно сделать, это взять каждую запись, 1 на 1, иполучите XML, поместите его в объект XmlDocument в .Net, удалите все поля, которые мне нужны (имя, фамилия и т. д.), и сохраните эту проанализированную информацию в другой таблице.
Я даже не могу получить этооператор для запуска: выберите * из числа потенциальных клиентов, где идентификатор от 1 до 1000
Если я просто выберу 1000 записей за раз (выберите лучшие 1000 * из числа потенциальных клиентов), это работает, но как тогда выбрать следующие 1000записи без какой-либо контрольной точки?
Моя машина имеет 4 процессора (2,53 ГГц) и 12 ГБ оперативной памяти.Это не сервер, но это мощная машина.Честно говоря, я не знаю, что делать дальше.
EDIT : я не учел, что исходный файл на самом деле был файлом MDF (и связанным с ним LDF), поэтому я просто прикрепил его ких в SQL Server.
РЕДАКТИРОВАТЬ 2 : Я перепутал и сказал, что столбец RawLeadXML был XML - это не так, это просто nvarchar (max).Честно говоря, я не знал, что там был тип данных xml.
РЕДАКТИРОВАТЬ 3 : я даже не могу выдать оператор удаления для этой таблицы: "удалить из лидов, где leadid = '100a7927-5311-4f12-8fe3-95c079d32dd4'" взрывается с помощью:
Msg 802, Level 17, State 20, Line 2
There is insufficient memory available in the buffer pool.
Понятия не имею, что делать дальше.Как, черт возьми, это вообще проблема?В мире существуют тысячи баз данных с большим количеством записей, чем у меня.
РЕДАКТИРОВАТЬ 4 : На случай, если кому-то все равно, ни одно из приведенных ниже решений не сработало.Я уверен, что это ограничение моей машины, и определенно не осуждение за прекрасные ответы, которые я получил ниже.В настоящее время я передаю заархивированную БД (2,6 ГБ) на наши серверы в Rackspace, а затем попытаюсь добавить индекс на этом оборудовании, надеюсь, не отключая наши производственные серверы.Как только индекс будет добавлен, я надеюсь, что смогу заархивировать базу данных и перенести ее обратно на свой локальный компьютер, а затем иметь возможность что-то с ней сделать.
EDIT 5 : Моя машина была буквально неспособна обрабатывать стол такого размера.Моя машина имеет 12 ГБ оперативной памяти, 64-разрядную версию Windows 7 Professional, четырехъядерный процессор 2,53 ГГц, SSD-накопитель и т. Д. Это довольно проблематично для машины для разработки.И это не могло справиться с этим.
Итак, я переместил БД на наш сервер в Rackspace в Лондоне.48 ГБ или памяти в этом, и он смог добавить нужный мне индекс.Даже после этого моя машина не смогла сделать с ней ничего такого полезного, поэтому я написал программу .Net, которая работает в Лондоне, чтобы выводить 1000 записей за раз, анализировать их в другой таблице, а затемпометьте исходные записи как обработанные.
Как только я это сделаю, мне придется покинуть БД в Лондоне, потому что я сомневаюсь, что смогу написать какие-либо значимые отчеты против этого чудовища на местном уровне.Это сделает разработку веселой.
Резюме : Я считаю, что нет хорошего способа обработки такого большого набора данных без использования аппаратного обеспечения серверного класса с как минимум 48 ГБ ОЗУ (в моем случае).