Задавайте вопросы, мы ответим
Вы не зашли.
подскажите не может ли быть "пересечения" данных из разных потоков при одновременной вставке и обновления в таблицу.
Что лучше использовать InnoDb или MyISAM при таких характеристиках структуры -объём базы около 1Gb , кол-во подключений из потоков - 1-2 сотни(теоретически, практически - десяток-два) , время подключения - 20-30 секунд, структура - 2 таблицы - одна обновляется , в другую добавляется.
Неактивен
При большом количестве одновременных вставок лучше использовать InnoDB (по скорости быстрее). Пересечения данных не будет, хотя я не до конца понимаю этот термин. Если нужна согласованная работа с несколькими таблицами, используйте транзакции (которые также есть в InnoDB).
Неактивен
Ну последовательность такова - в базе данных две таблицы - 1я содержит идентификаторы и обновляемые данные 2я представляет собой хранилище данных. Приложение считывает идентификатор и обновляет данные в 1 таблице, после чего вписывает данные во 2 таблицу с идентификатором из первой таблицы. Таких приложений( точнее потоков в приложении , одновременно выполняющих эту последовательность может быть пару сотен). Приложение и БД находится на одном и том же ПК. Перечечение всмысле - не могут ли данные из разных подключений смешаться и одновременно важно - надо ли блокировать для этого таблицы?
Неактивен
Вы написали не все. Напишите более точно последовательность запросов:
Неактивен
Зависит от того, что за данные вы обновляете, как вы обновляете и что подразумевается
под «смешаться». Если блокировать таблицы, то потоки смогут работать только последова-
тельно. Если работать параллельно, то потоки будут видеть те или иные данные в зависи-
мости от уровня изоляции транзакции (если выбрано хранилище InnoDB).
Неактивен
Две таблицы
mysql> show columns from device;
+------------+------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------------+------+-----+---------+----------------+
| id | mediumint(20) unsigned | NO | PRI | NULL | auto_increment |
| Pnum | varchar(20) | YES | MUL | NULL | |
| IMEI | varchar(20) | YES | | NULL | |
| batt | varchar(6) | YES | | NULL | |
| simnumber | varchar(15) | YES | | NULL | |
| money | varchar(8) | YES | | NULL | |
| gsm_signal | varchar(8) | YES | | NULL | |
+------------+------------------------+------+-----+---------+----------------+
mysql> show columns from information;
+-------------+------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------------+------+-----+---------+-------+
| device_id | mediumint(20) unsigned | NO | MUL | NULL | |
| DT | datetime | YES | | NULL | |
| type | varchar(8) | YES | | NULL | |
| Snum | varchar(16) | YES | | NULL | |
| work_hours | varchar(12) | YES | | NULL | |
| energy | varchar(16) | YES | | NULL | |
| vol1 | varchar(16) | YES | | NULL | |
| vol2 | varchar(16) | YES | | NULL | |
| consumption | varchar(10) | YES | | NULL | |
| temp1 | varchar(10) | YES | | NULL | |
| temp2 | varchar(10) | YES | | NULL | |
| error | varchar(8) | YES | | NULL | |
+-------------+------------------------+------+-----+---------+-------+
Таблицы связаны полями id и device_id.
1) Подключается клиент запрашивает данные Pnum и IMEI и id из device/
2) если таковые существуют проверяются на соответствие и если совпадают, то в строке с id обновляются остальные данные.
3) Вставляются данные в таблицу information с device_id=id ( строк 20 -40 номинально, в редких случаях до 500 строк)
Неактивен
Вот такие запросы делаю
"SELECT id FROM DEVICE WHERE Pnum=%1 AND IMEI=%2"
UPDATE DEVICE SET batt=:batt,simnumber=:simnumber,money=:money,gsm_signal=:gsm_signal WHERE id=:id"
"INSERT INTO information(device_id,DT,type,Snum,work_hours,energy,vol1,vol2,consumption,temp1,temp2,error) VALUES( :device_id,: DT,:type,:Snum,:work_hours,:energy,:vol1,:vol2,:consumption,:temp1,:temp2,:error)"
Отредактированно demiurg (18.09.2011 21:34:06)
Неактивен
Если возможны одновременные обращения к одним и тем же строкам первой таблицы, то SELECT и UPDATE нужно делать в транзакции.
Неактивен