SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.06.2012 12:28:03

VladimirPivovar
Завсегдатай
Зарегистрирован: 26.04.2011
Сообщений: 31

Использование протоколов SHARED MEMORY, PIPE для работы QT c MySQL

Здравствуйте!

Расскажите нам пожалуйста, какой лучше выбрать драйвер, как подключиться и как передавать (вставлять) большие объемы данных в 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 таблиц ( для каждого месяца))


CREATE TABLE `may` (
  `answer` bit(1) DEFAULT NULL,
  `dateOfCall` date DEFAULT NULL,
  `timeOfCall` time DEFAULT NULL,
  `phoneNumberA` varchar(32) DEFAULT NULL,
  `phoneNumberB` varchar(32) DEFAULT NULL,
  `callDuration` varchar(5) DEFAULT NULL,
  `connectionIdentifier` varchar(10) DEFAULT '',
  `offset` int(11) unsigned DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
 

В первую очередь интересует  протокол SHARED MEMORY.

Отредактированно VladimirPivovar (28.06.2012 12:31:25)

Неактивен

 

#2 28.06.2012 13:19:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Использование протоколов SHARED MEMORY, PIPE для работы QT c MySQL

Если вы подключаетесь через SOCKET, значит система unix. NAMED PIPE и SHARED MEMORY доступны только в винде. Думаю, что узкое место в движке, а не в передаче данных.
Зря не рассматриваете LOAD DATA INFILE, сделать из бинарника csv значительно быстрее, чем вставить данные в базу (сам делал до миллиардов записей).

Неактивен

 

#3 28.06.2012 13:48:41

VladimirPivovar
Завсегдатай
Зарегистрирован: 26.04.2011
Сообщений: 31

Re: Использование протоколов SHARED MEMORY, PIPE для работы QT c MySQL

На данный момент работаю в винде, поэтому  интересуют данные протоколы, как их использовать.

Неактивен

 

#4 28.06.2012 14:26:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Использование протоколов SHARED MEMORY, PIPE для работы QT c MySQL

Если исходить из 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


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 03.07.2012 12:11:36

VladimirPivovar
Завсегдатай
Зарегистрирован: 26.04.2011
Сообщений: 31

Re: Использование протоколов SHARED MEMORY, PIPE для работы QT c MySQL

Расскажите пожалуйста когда предпочтительнее использовать  PIPE , SHARED MEMORY, а когда LOAD DATA INFILE. Может есть кто все варианты перепробовал

Неактивен

 

#6 04.07.2012 08:13:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Использование протоколов SHARED MEMORY, PIPE для работы QT c MySQL

VladimirPivovar написал:

Расскажите пожалуйста когда предпочтительнее использовать  PIPE , SHARED MEMORY, а когда LOAD DATA INFILE. Может есть кто все варианты перепробовал

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson