Как перенести многомерный массив в таблицу MySQL (через Zeoslib)?

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

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

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

3 ответа

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

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

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

  • Для простого двумерного массива вы можете рассмотреть возможность создания столбца для одного измерения и использовать строки для другого. Однако в таблице не может быть более 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))

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

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

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

Другие вопросы по тегам