Память будет быстрее, так как в конце транзакции не нужно переходить на диск.В этом случае я бы попробовал сначала BTREE, а не HASH-индекс, потому что он позволяет вам использовать частичные составные индексы, как и таблицы на диске.
Также попробуйте с подготовленными инструкциями для операций вставки и удаления: подготовьте один изкаждый перед обработкой, а затем вызвать с соответствующими параметрами. может быть быстрее, так как не нужно анализировать SQL;но в некоторых случаях вся система становится немного медленнее, потому что они занимают нетривиальные объемы памяти.
Другой вариант - экспериментальная функция HandlerSocket , доступная в нескольких форках.MySQL, как и сервер Percona , позволяет получить доступ к таблице MySQL в качестве хранилища NoSQL с огромным выигрышем в производительности, но с полным соответствием ACID.(Люди из Percona - фанатики производительности; даже если вы не можете использовать HandlerSocket, обязательно протестируйте их ответвление)
Наконец, жизнеспособный (но более трудоемкий) вариант - это отдельная база данных в памяти.Я бы предпочел пойти с Redis , который является очень высокоскоростным хранилищем ключей-значений в памяти с добавленной особенностью, что «значения» являются полезными структурами данных.В вашем случае вы можете сохранить набор идентификаторов для каждой таблицы, например,
tokeep:puppy => 1,4,6,76.....
, это простая (и атомарная) операция по добавлению элемента в набор (SADD tokeep:puppy 76
), и наВ конце концов, вы извлекаете их все для создания операции SQL DELETE WITH id NOT IN (...)
И самый последний вариант, о котором я думаю (и еще больше работы для вас), состоит в том, чтобы поместить все в один и тот же магазин: есть форкRedis, ранее назывался redisql, но теперь это База данных алхимии ;он добавляет таблицы SQL в Redis, сохраняя большинство преимуществ производительности NoSQL.Таким образом, вы можете иметь свои «обычные» таблицы в виде таблиц SQL в Alchemy, хранить наборы «tokeep» в NoSQL на том же сервере и в конце сделать:
DELETE FROM puppy WHERE id NOT IN ($SMEMBERS tokeep:puppy );
Bam!