Skip to content
This repository has been archived by the owner on Nov 15, 2021. It is now read-only.

В slowpoke нет режима «nosync» #19

Closed
temoto opened this issue Jul 17, 2019 · 6 comments
Closed

В slowpoke нет режима «nosync» #19

temoto opened this issue Jul 17, 2019 · 6 comments

Comments

@temoto
Copy link

temoto commented Jul 17, 2019

В двух словах: не нашел код, который реализует очень нужную мне фичу "нет режима nosync". Такое заявление было только на хабре и в коде "with sync at end", в readme не сказано, поэтому не знаю насколько вам интересно, может быть новый курс без sync и это приемлимо.

  • slowpoke.Set = return pudge.Set
  • pudge.Set = Open(filename, nil).Set
  • pudge.Open(filename, cfg*Config) cfg=nil -> DefaultConfig
  • DefaultConfig.SyncInterval = 0 sec, 0 - disable sync
  • pudge.db.Close() сделал бы нужные вызовы .Sync(), но его не видно
@recoilme
Copy link
Owner

Не уверен что понял вопрос.
Если интервал синхронизации не задан (равен нулю), sync делает операционная система (на свое усмотрение). Метод Close - делает sync перед закрытием в любом случае.
https://github.com/recoilme/pudge/blob/master/pudge.go#L148

@temoto
Copy link
Author

temoto commented Jul 17, 2019

Наверное, вопрос можно сформулировать так: что slowpoke не делает sync, теряет данные, это противоречит заявлению на хабре и в исходниках "with sync at end". Вы знаете, это умышленно, или это баг?

upd: все это с добавками "насколько я понял код", моя цель не злая, просто хочу узнать.

@recoilme
Copy link
Owner

в первой версии slowpoke был только один режим - с принудительным sync - после каждой записи: https://habr.com/ru/post/354224/

"Все команды записи в slowpoke атомарны, и завершаются командой sync (синхронизация данных). Дело в том, что современные файловые системы при записи в файл, пишут по сути в буфер. И в случае падения операционной системы буфер будет потерян. Большинство баз данных имеет режим nosync (может называться по разному, но суть в том, что операция синхронизации очень медленная, особенно это заметно на старых винчестерах и для победы в бенчмарках и для ускорения записи используется данный режим)."

Для пакетной записи - предлагалось использовать sets. Что оказалось не очень удобно на практике. В новом движке ( https://github.com/recoilme/pudge ) - нет режима принудительного sync - на каждую запись. И появилась возможность его отключения, те по сути nosync. Либо - интервальная синхронизация по таймеру.

Те статья на хабре не соответствует текущей версии.

@recoilme
Copy link
Owner

recoilme commented Jul 17, 2019

Те слоупоке сейчас - обертка над https://github.com/recoilme/pudge
Посмотрите pudge - там более удобное и высокоуровневое апи

Последняя версия с принудительным sync на каждый инсерт - https://github.com/recoilme/slowpoke/releases - была 1.5
Но я не рекомендую ее.

@temoto
Copy link
Author

temoto commented Jul 17, 2019

Да-да, я цитировал код pudge в первом сообщении только потому что смотрел его.

Короче резолюция такая, что это не баг и все в курсе. Может быть вам будет интересен патч документации типа - // with sync at end ?

@recoilme
Copy link
Owner

Отлично. Я думаю если возникнет подобный вопрос - достаточно будет сослаться на это issue

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants