Как перенести многомерный массив в таблицу MySQL (через Zeoslib)?
Я использую библиотеку Zeoslib в Delphi.
У меня есть большой многомерный статический массив, который мне нужно перенести в пустую таблицу в локальной базе данных MySQL. Как я могу сделать это эффективно?
Просто перебрать миллион операторов вставки?
3 ответа
- Вы можете использовать синтаксис MySQL:
INSERT INTO tab VALUES (v11,..., v1n), ..., (vm1, ..., vmn)
, Итак, вы можете собирать строки вашего массива в куски, состоящие из M строк. Это серьезно улучшит производительность. ( Больше) - Вы можете выгрузить массив в текстовый файл, а затем использовать
LOAD DATA INFILE
заявление, чтобы загрузить текстовый файл эффективно. ( Больше) - Вы можете рассмотреть возможность использования других сторонних библиотек, таких как 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.
РЕДАКТИРОВАТЬ: это ответ на ваш вопрос, прежде чем редактировать его. Теперь это неважно.