bemulima
@bemulima
ФуллСтекРазработчик

Как создать иллюзию удаления с помощью rt_index?

Есть один индекс в диске disc_index и еще один realtime индекс rt_index. Их поля и типы полей одинаковые. Их соединил вот так под одним индексом commonIndex:
index commonIndex
{
type = distributed
local = disc_index
local = rt_index
}

Так вот, чтоб добавить новую запись я делаю:
INSERT INTO rt_index values (100,'text');
Всё отлично, когда я выбираю все записи:
SELECT * FROM common_index ORDER BY id DESC
новая запись показывается. Если необходимо отображать типа измененную версию записи из disc_index то просто записываю новую запись в realtime индекс rt_index:
INSERT INTO rt_index values (55,'text was updated');

И тогда если выбрать из индекса common_index
SELECT * FROM common_index ORDER BY id DESC
то ID 55 возвращается из индекса rt_index а не из desc_index, таким образом увидим обновленную версию. А если надо еще раз необходимо обновить то просто обновляю эту запись из rt_index
UPDATE rt_index SET id=55, text='text was updated another time';

Всё замечательно, НО когда дошел до вопроса удаления записи я понял, что просто удалением тут не обойдешься, по этому надо придумать, какой то хитрый способ, по этому я добавил просто новое логическое поле deleted и выбираю так:
select * from common_index where deleted=0 order by id desc

С начало даже показалось, что работает. Но потом выяснилось, что нет. Не понятно почему, даже, когда я обновлял поле deleted=0
UPDATE rt_index SET deleted=0 WHERE id=55;
я вижу в консоле, что в индексе rt_index запись ID 55 после deleted имеет значение 1, но почему то, когда выбираешь все записи
select * from common_index where deleted=0 order by id desc

в список попадает из disc_index а не из rt_index. Вопрос, как правильно решается подобный вопрос?
  • Вопрос задан
  • 29 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы