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 курсор создаст, и будет оттуда выбирать по запросу. Если таких долгоживущих курсоров предполагается несколько, то имеет смысл использовать супервизор для создания таких процессов, с целью контроля и учёта.

September 2017

S M T W T F S
     1 2
3 4 56 78 9
10111213 14 1516
171819 20212223
24252627282930

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2017 06:52 am
Powered by Dreamwidth Studios