20
我有QLC二郎:優化複雜QLC
RefsBlocked = qlc:e(qlc:q([
Ref1 ||
{{Ref1, {pattern, {_Status1, _Pattern1, Limit1}}}, Count} <- dict:to_list(
qlc:fold(
fun({Key, _Ref2}, Acc) ->
dict:update_counter(Key, 1, Acc)
end,
dict:new(),
qlc:q([
{{Ref1, {pattern, {Status1, Pattern1, Limit1}}}, Ref2} ||
{Ref2, {status, Status2}} <- ets:table(Tmp),
{Ref3, {tag, Tag3}} <- ets:table(Tmp),
Ref2 =:= Ref3,
{Ref1, {pattern, {Status1, Pattern1, Limit1}}} <- ets:table(Tmp),
Ref =:= Ref1,
Status1 =:= Status2,
Pattern1 =:= Tag3
])
)
),
Count >= Limit1
], unique))
其中TMP是類型袋的ETS和Ref是特定的標識符我需要測試。
ETS包含從幾百到項十萬像
{Ref1, {definition, {Tuple1}}}
{Ref1, {status, scheduled}}
{Ref1, {status, blocked}}
{Ref1, {pattern, {scheduled, Pattern11, Limit11}}}
{Ref1, {pattern, {dispatched, Pattern12, Limit12}}}
{Ref1, {tag, Tag11}}
{Ref2, {definition, {Tuple2}}}
{Ref2, {status, scheduled}}
{Ref2, {status, dispatched}}
{Ref2, {pattern, {scheduled, Pattern21, Limit21}}}
{Ref2, {pattern, {dispatched, Pattern22, Limit22}}}
{Ref2, {tag, Tag21}}
{Ref3, {definition, Tuple3}}
{Ref3, {status, error}}
我。即對於每個Ref,有一個定義,一個或兩個(四個)狀態,零個或更多(大多數情況下不超過3個)模式以及零個或更多(大多數情況下不超過3個)標籤。
我需要測試一個特定的標識符是否被其他人阻擋。當其Tag = its Pattern及其狀態=其模式狀態的任何模式的標識符數量大於或等於其模式限制時,它被阻止。
有沒有一種方法來優化qlc?
是不是叫Erlang是因爲人們閱讀它而去,錯......?開玩笑 :) – 2011-05-31 03:40:30