mysql тип таблицы Memory

K
На сайте с 23.03.2010
Offline
34
2083

Работал ли кто, в мускуле с типом таблиц Memory?

Хочу кинуть туда данные счетчиков, для того чтобы, писать в базу на диск, только каждые 30 сек.

Тут возникла такая проблема, в мануале написано, что базу нужно очищать из памяти - только удаление таблицы и ее пересозданием (дроп или TRUNCATE TABLE). т.е. если просто удалять строку таблицы с которой ты уже отработал, она не уменьшает размер таблицы в памяти, даже если все строки удалить. Т.е. база может разрастись и попасть в СВОП.

И возник вопрос как правильно её дропать (пересоздать).

По идее можно сделать так:

LOCK TABLES

-переписывам данные из Мемори таблицы на диск

UNLOCK TABLES

TRUNCATE TABLE

Но тут возникает вопрос: в момент Анлока и до TRUNCATE TABLE не влезут ли какие нибудь инсерты и т.д.

Ведь запись в мемори базу идет постоянно.

SEO услуги, продвижение от 3.000руб., создание сателлитов, PHP программирование.
I1
На сайте с 30.07.2012
Offline
0
#1

INSERT INTO disk_tbl SELECT * FROM mem_tbl

TRUNCATE mem_tbl

K
На сайте с 23.03.2010
Offline
34
#2

Это тоже самое.

Как узнать, что какие либо данные не запишутся между командой Инсерт и Транкате?

Запись идет постоянно в мемори.

N
На сайте с 06.05.2007
Offline
419
#3

Если прочитать документацию внимательно, то становится ясно, что LOCK TABLES WRITE не дает никаким другим подключениям ничего делать с таблицей.

Соответственно, не запишутся. Но поскольку все остальные подключения будут ожидать, могут возникнуть другие проблемы.

Кнопка вызова админа ()
edogs software
На сайте с 15.12.2005
Offline
775
#4
kerinsky:
Работал ли кто, в мускуле с типом таблиц Memory?

Хочу кинуть туда данные счетчиков, для того чтобы, писать в базу на диск, только каждые 30 сек.
Тут возникла такая проблема, в мануале написано, что базу нужно очищать из памяти - только удаление таблицы и ее пересозданием (дроп или TRUNCATE TABLE). т.е. если просто удалять строку таблицы с которой ты уже отработал, она не уменьшает размер таблицы в памяти, даже если все строки удалить. Т.е. база может разрастись и попасть в СВОП.

И возник вопрос как правильно её дропать (пересоздать).
По идее можно сделать так:
LOCK TABLES
-переписывам данные из Мемори таблицы на диск
UNLOCK TABLES
TRUNCATE TABLE

Но тут возникает вопрос: в момент Анлока и до TRUNCATE TABLE не влезут ли какие нибудь инсерты и т.д.
Ведь запись в мемори базу идет постоянно.

Сделайте пару таблиц. Пишите во вторую когда первая кандидат на очистку (прошло 30 секунд допустим), очищайте вторую если в ней есть записи и первая не кандидат на очистку.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
K
На сайте с 23.03.2010
Offline
34
#5
edogs:
Сделайте пару таблиц. Пишите во вторую когда первая кандидат на очистку (прошло 30 секунд допустим), очищайте вторую если в ней есть записи и первая не кандидат на очистку.

Да, с парой таблиц, похоже самый безопасный вариант.

I1
На сайте с 30.07.2012
Offline
0
#6

почему не

lock table tbl write;

// write to disk

truncate table tbl;

unlock tables

должно на 5.x работать без проблем, но я проверил только на 5.5

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий