Альтернативы мутации в этом сценарии?

update table1  a 
   set a.col1='Y' 
 where exists(select 1 
                from table2 b
               where a.col1=b.col1 
                 and a.col2=b.col2
             )
1
задан Don 16 January 2019 в 22:29
поделиться

2 ответа

В ответ на (1) ваша функция get-cand выглядит очень похожей по структуре с использованием из clojure.core/cache . Вы можете посмотреть в кеши FIFO / LIFO / TTL, которые также могут быть просто обернуты в атом для обновления.

Что касается (2), хотя я не думаю, что это фактически считается «мутацией» (может быть, эксперт сможет уточнить), я считаю, что вполне разумно иметь большие кэшированные предварительные вычисления (в конце концов Таблица поиска [ 114] распространены, например, при обработке изображений, и они в основном являются предварительно гидратированными кешами).

0
ответ дан Nico Schneider 16 January 2019 в 22:29
поделиться

Я бы сделал это так, как вы предлагаете. Нет необходимости использовать dosync & amp; alter с ref для этого. Просто используйте локальный atom в каждом model. Это может быть тогда GC'd, когда модель больше не используется.


Обновление

Одной из альтернатив Java является использование LinkedHashMap. Вы можете установить максимальный размер и переопределить функцию removeEldestEntry() для управления поведением.


Обратите внимание, что этот синтаксис немного отключен, но я уверен, что вы знаете, как его исправить:

((deref...
0
ответ дан Alan Thompson 16 January 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: