Mar. 7th, 2017

jamhed: (Default)
В комплекте поставки Erlang имеется встроенная no-sql распределенная база данных mnesia, для хранения erlang термов. Один из популярных вопросов как сделать аналог select * from table limit M offset N. Над mnesia имеется надстройка qlc, в которой есть функции qlc:cursor/1 и qlc:next_answers/2, однако тут есть ряд засад: курсор прибит гвоздями к процессу который его создал, и при попытке его оттуда выдрать работать не будет.

Поэтому правильный способ обращения с таким курсором (как и вообще состоянием) это создать отдельный процесс (gen_server, например), который на стадии init курсор создаст, и будет оттуда выбирать по запросу. Если таких долгоживущих курсоров предполагается несколько, то имеет смысл использовать супервизор для создания таких процессов, с целью контроля и учёта.

July 2017

S M T W T F S
      1
23 45678
9101112 13 1415
1617 1819 20 2122
23242526272829
3031     

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 23rd, 2017 02:48 am
Powered by Dreamwidth Studios