小编Ben*_*ock的帖子

限制ETS存储的增长

我正在考虑使用Erlang的ETS作为新Elixir项目中用户搜索的缓存.根据用户输入,系统将使用昂贵的第三方API进行查找.

为了避免对同一个用户输入进行重复调用,我打算在外部API前放置一个缓存层,而ETS似乎是一个很好的选择.但是,由于用户输入的变化没有限制,我担心ETS表所需的存储空间将无限制地增长.

在我关于ETS的阅读中,我还没有看到其他人讨论过关于ETS中表格大小的问题.那是因为这是ETS的异常用例吗?

乍一看,我的偏好是限制ETS表中的条目数,并在达到限制后拒绝(即删除)最旧的条目...

在ETS中处理无限数量的条目是否有共同的策略?

erlang elixir ets

7
推荐指数
1
解决办法
687
查看次数

使用来自jQuery UI的Accordion,我在最后点击的链接周围得到了一个不需要的蓝色突出显示

我正在使用jQuery UI中的Accordion小部件.

每当我单击标题以展开某个部分时,该标题(实际上是h3元素的链接)都会突出显示.在Chrome中,它有一个蓝色突出显示,就像它是表单中当前选定的字段一样.

我需要摆脱蓝色突出显示,所以我将下面的代码混合在一起,到目前为止它似乎工作.

但是,我想知道在jQuery中是否有更好/更清晰的方法来做到这一点.这是正确的吗??

$(function() {
  $( "#mainnav" ).accordion().blur($('#mainnav'));
});
Run Code Online (Sandbox Code Playgroud)

jquery-ui

6
推荐指数
1
解决办法
2539
查看次数

多态嵌入结构

我想在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)

elixir ecto

6
推荐指数
1
解决办法
650
查看次数

标签 统计

elixir ×2

ecto ×1

erlang ×1

ets ×1

jquery-ui ×1