私はアイテムをets/detsテーブルに保存しています。現在、私はポストグルでそれをやっていますが、それがなくても、それともかなり遅くなったのかを見たいと思います。関数に基づいてets/detから項目を選択します。とにかくtab2list |> Enum.filterの他に何をするのですか?
私は基本的な空間クエリを行いたいと思います。アイテムが現在の場所のXメートル以内にあることを基本的にチェックします。
ets = ets.new(:table, [:named_table])
# Data looks like this: {id, lat, lng, data}
# This is the location of the requester, this changed on every query.
current_location = {lat, lng}
リクエストの50M以内のすべてのアイテムを欲しいのですが。
ets |> :ets.tab2list |> Enum.filter(fn {_, rlat, rlng, _} = row ->
Haversine.distance({rlat, rlng}, current_location) < 50
end)
これを実行する方法はありますか? Haversineの式が使用するように私はガードを使うことはできません:math.sin/asin/sqrt。
基本的に質問があります。関数によってETS/DETSテーブルをクエリする方法はありますか?あるいは、まずそれをリストに抽出する必要がありますか?
.Iもあります予告'foldr'。私の場合、私は順序を気にしないので、 'reverse'は必要ありませんが、あなたのexmpleでは、' foldl'と 'reverse'の代わりに' foldr'を使って順番に得ることができませんでしたあなたはそれをしたい? –
'foldr'は' foldl' + 'reverse'と同じ結果を返さなければなりません。私はその答えに感謝します! – Dogbert