- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
dirty_boostrap_test() ->
SourceTab = ets:new(source, [public, named_table]),
ReplicaTab = ets:new(replica, [public, named_table]),
%% Insert some initial data:
ets:insert(source, {1, 1}),
ets:insert(source, {2, 2}),
ets:insert(source, {3, 3}),
try
register(testcase, self()),
Replica = spawn_link(fun replica/0),
register(replica, Replica),
%% "importer" process emulates mnesia_tm:
spawn_link(fun importer/0),
%% "bootstrapper" process emulates bootstrapper server:
spawn_link(fun bootstrapper/0),
receive
done ->
SrcData = lists:sort(ets:tab2list(source)),
RcvData = lists:sort(ets:tab2list(replica)),
?assertEqual(SrcData, RcvData)
end
after
ets:delete(SourceTab),
ets:delete(ReplicaTab)
end.
importer() ->
Ops = [ {write, 3, 3}
, {write, 4, 4}
, {write, 4, 5}
, {delete, 2}
],
lists:map(fun(OP) ->
import_op(source, OP),
%% Imitate mnesia event (note: here we send it
%% directly to the replica process bypassing
%% the agent):
replica ! {tlog, OP}
end,
Ops),
replica ! last_trans.
replica() ->
receive
{bootstrap, K, V} ->
ets:insert(replica, {K, V}),
replica();
bootstrap_done ->
replay()
end.
replay() ->
receive
{tlog, Op} ->
import_op(replica, Op),
replay();
last_trans ->
testcase ! done
end.
import_op(Tab, {write, K, V}) ->
ets:insert(Tab, {K, V});
import_op(Tab, {delete, K}) ->
ets:delete(Tab, K).
bootstrapper() ->
{Keys, _} = lists:unzip(ets:tab2list(source)),
[replica ! {bootstrap, K, V} || K <- Keys, {_, V} <- ets:lookup(source, K)],
replica ! bootstrap_done.
CHayT # 0
CHayT # 0 ⇈
CHayT # 0 ⇈
defecate-plusplus # 0 ⇈
Разве в этих ваших отказоустойчивых СУБД не должно быть стрим репликации из коробки?
CHayT # 0 ⇈
bormand # 0
CHayT # 0 ⇈
bormand # 0 ⇈
CHayT # 0 ⇈
Desktop # 0
bormand # 0
Но когда мы проиграем журнал транзакций на грязном снимке, то всё будет ок.
А concuerror перебирает все варианты шедулинга процессов?
CHayT # 0 ⇈
Да, все некоммутирующие.
CHayT # 0 ⇈
bormand # 0 ⇈
Я помню, что в том же постгресе можно попросить сервер сделать чекпоинт, тогда он сделает отсечку лога транзакций и мне можно будет забить на wal до этой точки. И вот пока не получается понять, что именно происходит в момент чекпоинта.
Просто флашатся все странички, которые были грязными до начала чекпоинта?
bormand # 0 ⇈
CHayT # 0 ⇈
Это работает онлайн с небольшими издержками, но жрёт память пока чекпоинт активен.
MAKAKA # 0 ⇈
Переодически случается CHECKPOINT (или явно, или через checkpoint_timeout)
В момент CHECKPOINT всё флашится, а в WAL ставится REDO POINT (с которой будет проигрываться лог в случае дизастера)
Этим занимается процесс checkpointer.
Вроде так
bormand # 0 ⇈
tombstone это остатки после удаления записи? Хотя раз это undo лог, то походу наоборот, создания.
j123123 # 0
bormand # 0 ⇈
j123123 # 0 ⇈
bormand # 0 ⇈
j123123 # 0 ⇈
но там и процессор общего назначения есть, плата с плисиой там тупо в PCI всунута, так что это немного не то.
bormand # 0 ⇈
Так что если какую-то операцию в духе поиска в хешмапе получилось ускорить, то вай нот? А остальное на проце поработает.
booratihno # 0 ⇈
лол, тогда уже nvme уже
и всё сразу в ASIC
CHayT # 0 ⇈
JloJle4Ka # 0 ⇈
gologub # 0 ⇈
DypHuu_niBEHb # 0 ⇈
В более дорогих моделях будет EEPROM, или который под лампой стирался
В более дешевых одноарзовый, где прогромматор перемычки пережигал
bormand # 0 ⇈
И тут мы приходим к проблеме современных техпроцессов, в которых нельзя выразить нормальное ПЗУ. Кроме одноразового с пережиганием вроде.
У FPGA'шек тоже с этим проблема -- надо внешнее ПЗУ или внешний контроллер.
DypHuu_niBEHb # 0 ⇈
bormand # 0 ⇈
NOR только под какие-то редкие кейсы, где не надо много памяти но хочется стирать произвольные байты. Он слишком жирный.
DypHuu_niBEHb # 0 ⇈
bormand # 0 ⇈
DypHuu_niBEHb # 0 ⇈
bormand # 0 ⇈
Хер знает, может и правда NOR...
Но на самом деле скорость у SPI интерфейса никакая, так что я не вижу смысла туда лепить супер-охуенную память.
HEu3BECTHblu_nemyx # 0 ⇈
Я не знаю, работает ли это на самом деле.
bormand # 0 ⇈
JloJle4Ka # 0
Грязный бусь-траповый тест. Это на анимешника тест какой-то?
bormand # 0 ⇈
bormand # 0 ⇈
DypHuu_niBEHb # 0 ⇈
бдсм какой-то
bormand # 0 ⇈
bormand # 0 ⇈
CHayT # 0 ⇈
DypHuu_niBEHb # 0
https://id-press-a.ru/#service (18 06)
ааааааааа
CHayT # 0 ⇈
DypHuu_niBEHb # 0 ⇈
18.06.2021
gologub # 0 ⇈
DypHuu_niBEHb # 0 ⇈
18.06.2021
gologub # 0 ⇈
DypHuu_niBEHb # 0 ⇈
bormand # 0 ⇈
Бедняги )))
DypHuu_niBEHb # 0 ⇈
гребаные шовинисты
gologub # 0 ⇈
еще раз напомню, что в рашке «инженер» - мученая степень типа боколавра
JloJle4Ka # 0 ⇈
DypHuu_niBEHb # 0 ⇈
Вот Ротойоб никаких ВУЗов не заканчивал, и это не мешает ему быть гениальным программистом
Хотя может и заканчивал.. Я не знаю точно
bootcamp_dropout # 0 ⇈
Desktop # 0 ⇈
DypHuu_niBEHb # 0 ⇈
Desktop # 0 ⇈
DypHuu_niBEHb # 0 ⇈
bormand # 0 ⇈
DypHuu_niBEHb # 0 ⇈
Desktop # 0 ⇈
что может быть луччее
Desktop # 0 ⇈
DypHuu_niBEHb # 0 ⇈
-инженера-конструктора, заработная плата от 40 000 рублей
ого
HEu3BECTHblu_nemyx # 0 ⇈
Desktop # 0 ⇈