我正在考虑使用Erlang的ETS作为新Elixir项目中用户搜索的缓存.根据用户输入,系统将使用昂贵的第三方API进行查找.
为了避免对同一个用户输入进行重复调用,我打算在外部API前放置一个缓存层,而ETS似乎是一个很好的选择.但是,由于用户输入的变化没有限制,我担心ETS表所需的存储空间将无限制地增长.
在我关于ETS的阅读中,我还没有看到其他人讨论过关于ETS中表格大小的问题.那是因为这是ETS的异常用例吗?
乍一看,我的偏好是限制ETS表中的条目数,并在达到限制后拒绝(即删除)最旧的条目...
在ETS中处理无限数量的条目是否有共同的策略?
我正在使用jQuery UI中的Accordion小部件.
每当我单击标题以展开某个部分时,该标题(实际上是h3元素内的链接)都会突出显示.在Chrome中,它有一个蓝色突出显示,就像它是表单中当前选定的字段一样.
我需要摆脱蓝色突出显示,所以我将下面的代码混合在一起,到目前为止它似乎工作.
但是,我想知道在jQuery中是否有更好/更清晰的方法来做到这一点.这是正确的吗??
$(function() {
$( "#mainnav" ).accordion().blur($('#mainnav'));
});
Run Code Online (Sandbox Code Playgroud) 我想在Postgres中存储一个树结构,并且希望在树的每个节点上嵌入一个任意的Elixir结构,如下所示:
defmodule Node do
use Ecto.Schema
schema "nodes" do
belongs_to :parent_node, Node
embeds_one :struct, ArbitraryDataType
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我认为embeds_one需要指定一个特定的struct数据类型,这不适用于我的情况。有没有解决的办法?
我的备份计划是使用两个字段,一个用于struct type,一个用于struct fields,如下所示:
defmodule Node do
use Ecto.Schema
schema "nodes" do
belongs_to :parent_node, Node
field :struct_type, :string
field :fields, :map
end
end
Run Code Online (Sandbox Code Playgroud)
为了首先保存记录,我需要使用该__struct__字段来确定结构类型。然后,在从数据库中检索节点之后,我将使用类似以下的逻辑来重建原始结构:
Enum.reduce(
retrieved_node.fields,
String.to_atom("Elixir.#{retrieved_node.struct_type}") |> struct,
fn {k,v}, s -> Map.put(s, String.to_atom(k), v) end
)
Run Code Online (Sandbox Code Playgroud)