пишется неширокая строка: имя потока, имя файла, таймстемп.
в код закралась ошибка и база данных выросла до гигабайта. Там оказалось 7 млн записей, смешная цифра то.
Скрипт который удалял их и оставил около 8 тыс, работал на среднем компе 2 часа и оставил 1,2 гигабайта (!)
Потребовалось файл закрыть и переоткрыть с force,true, чтобы через какое-то ощутимое время получилось 64 мегабайт.
Выходит, что если бы мы просто на каждую запись писали на диск большой жсон, это было бы в целом лучше и эффективнее, чем специализированная БД.
Это вообще нормально?
Специализированная бд это вы про dets?
Так dets уже давно не рекомендован к использованию, даже в OTP, если я не ошибаюсь. Я обычно варю ets, которая по таймеру на диск синкается.
Те "дампим жсон на диск"?
Используем ets + кастомный wal-log изменений, чтобы не протерять данные в случае внезапного ребута системы. Сейчас выявились проблемы при работе системы, когда диск закончился, но в других случаях не имеем проблем ни со скорость восстановления ни с чем другим
Да грустно. По современным меркам это вообще не объёмы.
Те руками пишешь wal по сути append log бд вручную?
Да имеено так. Безотказный вариант
Немного отдает "сходить набрать песка для запекания своего кремния" :) Интересно вот что: sqlite тоже очень тормозной. Что принципиально иного в постгресе, что он настолько быстрее? Хранение в памяти?
Если ключи можно держать в памяти, то bitcask довольно быстрый и весьма надёжен, потому как база на диске просто wal, а в случае чего совсем плохого индексные файлы из этого wal легко восстановить.
А если нужно держать данные на дичке?
Наверное, я непонятно написал, bitcask не может быть disk only. Индекс ключей всегда грузится в память весь.
Тут проблема в другом. Если в момент падения ноды идет запись данных, то при поднятии ноды станет очень грустно сначала девопсам, а потом и нам.
Тк база просто wal, те append only,она всегда восстановится, хоть и с потерей последних данных, но тут даже Oracle их потеряет.
а у wal-ов что-то кроме снепшотов есть для того, чтобы не давать сквида на старте?
Если говорить о bitcask, то он дробит wal на сегменты и скидывает периодически индекс на диск. Потому восстановление зависит от того, погиб индекс или нет.
индекс или полное состояние базы?
А удаления и апдейты записей как делаются?
добавлением записи в конец wal. Периодически wal плющится.
Обсуждают сегодня