Что самый быстрый путь состоит в том, чтобы загрузить XML-файл в MySQL с помощью C#?

, Если я хочу распечатать 'Привет' к строкам 4,5, 6 и 7, что не так:

, Если Вы хотите сделать что-то в случайным образом выбранных местах всюду по Вашему файлу, Вы лучше из записи нажатий клавиш и воспроизведения их. Перейдите к первой строке, которую Вы хотите изменить, и поразить qz к запуску записи в регистр z. Сделайте любые редактирования, которые Вы хотите для той строки и поражаете q снова, когда Вы закончены. Перейдите к следующей строке, которую Вы хотите измениться и нажать @z для воспроизведения макроса.

12
задан OMG Ponies 27 December 2009 в 03:16
поделиться

8 ответов

Есть 2 части это:

  • чтение файла xml
  • запись в базу данных

Для чтения файла xml перейдите по этой ссылке http: //csharptutorial.blogspot. com / 2006/10 / read-xml-fast.html , показывает, что 1 МБ можно прочитать за 2,4 секунды с помощью потокового чтения, это будет 2400 секунд или 40 минут (если мои математические вычисления работают так поздно) для 1 Файл GB.

Из того, что я прочитал, самый быстрый способ получить данные в MySQL - это использовать ЗАГРУЗИТЬ ДАННЫЕ.

http://dev.mysql.com/doc/refman/5.1/en/load-data. html

Следовательно, если вы можете читать xml-данные, запишите их в файлы, которые могут использоваться командой ЗАГРУЗИТЬ ДАННЫЕ, а затем запустите ЗАГРУЗИТЬ ДАННЫЕ. Общее время может быть меньше часов, которые вы проводите.

1 / en / load-data.html

Следовательно, если вы можете читать XML-данные, запишите их в файлы, которые могут использоваться с помощью LOAD DATA, затем запустите LOAD DATA. Общее время может быть меньше часов, которые вы проводите.

1 / en / load-data.html

Следовательно, если вы можете читать XML-данные, запишите их в файлы, которые могут использоваться с помощью LOAD DATA, затем запустите LOAD DATA. Общее время может быть меньше часов, которые вы проводите.

12
ответ дан 2 December 2019 в 20:41
поделиться

этот помогает вообще? Это хранимая процедура, которая загружает весь XML-файл в столбец, затем анализирует его с помощью XPath и создает таблицу / вставляет данные оттуда. Выглядит безумно, но может сработать.

0
ответ дан 2 December 2019 в 20:41
поделиться

У меня есть несколько мыслей, которые помогут ускорить это ...

  1. Размер запроса, возможно, потребуется изменить, часто бывает момент, когда большой оператор требует больше времени на синтаксический анализ и так становится медленнее. 500 может быть оптимальным, но, возможно, это не так, и вы могли бы немного настроить его (может быть больше, а может быть меньше).

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

  3. Что касается базы данных, убедитесь, что таблица настолько пуста, насколько это возможно. . Отключите все индексы и загрузите данные перед их индексированием.

1
ответ дан 2 December 2019 в 20:41
поделиться

Хорошо, я ' Я собираюсь быть здесь идиотом и отвечать на ваш вопрос вопросом.

Зачем помещать его в базу данных?

Что, если ... просто "что, если ..." вы записали xml в файлы на локальном диске и, если необходимо, записали некоторую информацию для индексации в базу данных. Это должно выполняться значительно быстрее, чем попытка загрузки базы данных, и было бы намного более переносимым. Все, что вам потребуется, это способ поиска и способ индексирования реляционных ссылок. Должно быть много помощи с поиском, а реляционный аспект должен быть достаточно легким для построения? Вы можете даже подумать о том, чтобы переписать информацию, чтобы каждый файл содержал одну запись со всеми ответами и комментариями прямо здесь.

В любом случае, только мои два цента (и это не стоит ни цента).

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

В любом случае, только мои два цента (и это не стоит ни цента).

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

В любом случае, только мои два цента (и это не стоит ни цента).

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

В любом случае, только мои два цента (и это не стоит ни цента).

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

В любом случае, только мои два цента (и это не стоит ни цента).

1
ответ дан 2 December 2019 в 20:41
поделиться

SqlBulkCopy ROCKS. I used it to turn a 30 min function to 4 seconds. However this is applicable only to MS SQL Server.

Might I suggest you look at the constraints on your table you've created? If you drop all keys on the database, constraints etc, the database will do less work on your insertions and less recursive work.

Secondly setup the tables with big initial sizes to prevent your resizes if you are inserting into a blank database.

Finally see if there is a bulk copy style API for MySQL. SQL Server basically formats the data as it would go down to disk and the SQL server links the stream up to the disk and you pump in data. It then performs one consistency check for all the data instead of one per insert, dramatically improving your performance. Good luck ;)

Do you need MySQL? SQL Server makes your life easier if you are using Visual Studio and your database is low performance/size.

1
ответ дан 2 December 2019 в 20:41
поделиться

Не тот ответ, который вам нужен, но mysql c api имеет функцию mysql_stmt_send_long_data .

0
ответ дан 2 December 2019 в 20:41
поделиться

В одном из ваших комментариев выше я заметил, что вы рассматриваете MSSQL, поэтому решил опубликовать это. В SQL Server есть служебная программа SQMLXMLBulkLoad, предназначенная для импорта больших объемов XML-данных в базу данных SQL Server. Вот документация для версии SQL Sever 2008:

http://msdn.microsoft.com/en-us/library/ms171993.aspx

Более ранние версии SQL Server также имеют эту утилиту

0
ответ дан 2 December 2019 в 20:41
поделиться

В PostgreSQL , самый быстрый способ получить объемные данные - это отбросить все индексы и триггеры, использовать эквивалент MySQL LOAD DATA , а затем воссоздать индексы / триггеры. Я использую эту технику, чтобы загрузить 5 ГБ данных форума в базу данных PostgreSQL примерно за 10 минут.

Конечно, это может не относиться к MySQL, но попробовать стоит. Кроме того, ответ на этот вопрос SO предполагает, что это действительно жизнеспособная стратегия для MySQL.

0
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: