Быстрая вставка необработанных двоичных данных из нескольких файлов для доступа к базе данных - PullRequest
0 голосов
/ 24 февраля 2011

Я ищу самый быстрый способ чтения из нескольких двоичных файлов и записи всего в одной базе данных MS Access в нескольких таблицах.SQL Server или любая другая база данных не являются опцией.Я использую C #.

Допустим, у меня есть только один файл, содержащий 1 ГБ данных.

  1. Файл начинается с заголовка (содержащего код с именами столбцов), за которым следует большеболее 700 000 блоков данных измерений.Заголовок имеет длину менее 100 байт.Один блок данных имеет длину 1500 байт (372 x одиночный float + 12 байт для даты и времени)

  2. первые 84 отдельных значения должны быть вставлены в первую таблицу базы данных

  3. остальные 288 отдельных значений разделены поровну в 9 таблицах, по 32 значения * каждая
  4. каждая строка таблицы имеет время и дату в качестве первого столбца

На данный момент я использую бинарный ридер,Я читаю блок за блоком и выполняю инструкцию INSERT (ADO.NET) 10 раз за блок.Это будет больше чем 7 миллионов INSERT.

Время выполнения для 1,5 МБ составляет около 1 минуты - 1 ГБ будет больше, чем 10 часов.

Есть ли способ сделать это намного быстрее?Как вы думаете, что можно ожидать?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

Вы должны использовать SqlBulkCopy Класс Увидеть. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

0 голосов
/ 25 февраля 2011

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

Можно попробовать изменить свойства двигателя Jet для sycing, но было бы лучшепросто начните транзакцию SQL для соединения, а затем зафиксируйте после большого количества записей.Вам также нужно будет включить автоматическую фиксацию, как в этом примере VB .

Кроме того, если вы указали отсортированные ключи, отмените это.Используйте ADOX, чтобы сделать их индексными ключами после загрузки всех данных.

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