Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте!
Расскажите нам пожалуйста, какой лучше выбрать драйвер, как подключиться и как передавать (вставлять) большие объемы данных в MySQL Server. ( LOAD DATA IN FILE и csv не предлагать потому, что данные считываются с бинарного файла, пока еще не пробовал из бинарника генерировать csv файл с количестовм записей от 2млн, думаю это займет не мало времени ) используя протоколы SHARED MEMORY и PIPE
Данные для вставки (бинарные файлы по 100-200 мегабайт) и база данных ( сама СУБД MySQL SERVER 5.5.25) находятся на одном локальном компьютере ( даже на одном локальном диске).
На данный момент делаю вставки по 1000 записей в результате вижу что за 1 секунду вставляется в среднем 16-17 тысяч записей в секунду используя протокол SOCKET. Думаю можно добиться еще более быстрой вставки
Хочу вначале попробовать вставить все 2 млрд записей в одну общую таблицу, а потом уже на 12 таблиц буду разносить и индексировать
А вот структура самой таблицы ( всего у меня 12 таблиц ( для каждого месяца))
Отредактированно VladimirPivovar (28.06.2012 12:31:25)
Неактивен
Если вы подключаетесь через SOCKET, значит система unix. NAMED PIPE и SHARED MEMORY доступны только в винде. Думаю, что узкое место в движке, а не в передаче данных.
Зря не рассматриваете LOAD DATA INFILE, сделать из бинарника csv значительно быстрее, чем вставить данные в базу (сам делал до миллиардов записей).
Неактивен
На данный момент работаю в винде, поэтому интересуют данные протоколы, как их использовать.
Неактивен
Если исходить из http://dev.mysql.com/doc/refman/5.0/en/ … nnect.html
то
The value of host may be either a host name or an IP address. If host is NULL or the string "localhost", a connection to the local host is assumed. For Windows, the client connects using a shared-memory connection, if the server has shared-memory connections enabled. Otherwise, TCP/IP is used.
То есть, в случае, если mysql-сервер установлен на windows-системе, и подключение происходит с того же сервера, то
пропишите в my.ini (где он находится точно не скажу, поищите поиском по диску) в секцию [mysqld]
shared-memory
shared-memory-base-name=MySQL
Неактивен
Расскажите пожалуйста когда предпочтительнее использовать PIPE , SHARED MEMORY, а когда LOAD DATA INFILE. Может есть кто все варианты перепробовал
Неактивен
VladimirPivovar написал:
Расскажите пожалуйста когда предпочтительнее использовать PIPE , SHARED MEMORY, а когда LOAD DATA INFILE. Может есть кто все варианты перепробовал
Вы говорите о разных составляющих производительности: способ обращения к базе обычно влияет на скорость передачи sql-запроса. С другой стороны, скорость исполнения запроса часто оказывается намного ниже, чем скорость его передачи. LOAD DATA INFILE подразумевает другой алгоритм вставки, оптимизированный под большое число вставляемых записей. Скорость лучше всего тестировать на своем примере.
Неактивен
Страниц: 1