Как перенести многомерный массив в таблицу MySQL (через Zeoslib)? - PullRequest
2 голосов
/ 04 сентября 2011

Я использую библиотеку Zeoslib в Delphi.

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

Просто повторить миллион операторов вставки?

Ответы [ 3 ]

9 голосов
/ 04 сентября 2011
  1. Вы можете использовать синтаксис MySQL: INSERT INTO tab VALUES (v11,..., v1n), ..., (vm1, ..., vmn). Итак, вы можете собирать строки вашего массива в куски, состоящие из M строк. Это серьезно улучшит производительность. ( Подробнее )
  2. Вы можете выгрузить массив в текстовый файл, а затем использовать оператор LOAD DATA INFILE для эффективной загрузки текстового файла. ( Подробнее )
  3. Вы можете использовать другие сторонние библиотеки, такие как AnyDAC. Который реализует функцию Array DML, которая предназначена именно для вашей задачи. ( Подробнее )
0 голосов
/ 04 сентября 2011

Многомерные массивы плохо переводятся в MySQL.

Если вы имеете дело с крошечным массивом, вы, вероятно, добьетесь успеха, но он просто не масштабируется. Несмотря ни на что, скоро это станет ужасно.

  • Для простого 2-мерного массива вы можете создать столбец для одного измерения и использовать строки для другого. Однако в таблице не может быть более 4096 столбцов:

http://dev.mysql.com/doc/refman/4.1/en/column-count-limit.html

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

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

  • Или вы можете создать строку для каждого элемента массива и сохранить индекс каждого измерения в качестве первичного ключа. Но когда вы хотите получить значения, вам нужно создать запрос монстра.
  • Вам либо нужно сделать:
    • несколько объединений, но вы можете сделать только 61 объединение в запросе:

http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html

Максимальное количество таблиц, на которые можно ссылаться в одном соединении, равно 61. Это также относится к числу таблиц, на которые можно ссылаться в определении представления.

    • Или создайте запрос, сгруппируйте его по ключу строки и условно выберите правильное значение с комбинацией групповой функции и условия, например, так: sum(if(x=1,y,0))
0 голосов
/ 04 сентября 2011

У меня была такая же проблема, только в php 2D массивах.Сохраните размеры массива (x, y, z и т. Д. Длина, что означает количество значений на каждом уровне).затем объедините весь массив в длинную строку, разделите ее специальным уникальным символом, таким как | или ,, и при получении данных вы можете разделить строку на основе данных измерений.

Есливам это нужно, я могу показать вам свой php-код, но я вижу, что вы предпочитаете delphi.

РЕДАКТИРОВАТЬ: это ответ на ваш вопрос, прежде чем вы его отредактировали.Теперь это неважно.

...