Java 在SOLR数据库中,唯一的字符串字段是否在RAM中多次存储?

Java 在SOLR数据库中,唯一的字符串字段是否在RAM中多次存储?,java,lucene,solr,Java,Lucene,Solr,我有一个SOLR数据库,它需要有一个新字段,其中包含一个类似于标记的字符串列表,但它们是预定义的并用于内部目的。该SOLR核心的搜索结果将通过公共互联网传递给第三方网站开发者。因此,我想混淆标签,使人们不可能猜出一个会泄露另一位客户信息的标签 我可以很容易地使用guid来实现这一点,但我想知道,在RAM中有数十万条记录,并且一个字段包含多个guid的数组,会有什么影响 如果GUID被记录为原子,即GUID的一个副本和对它的多个引用,那么这不是问题。但我无法确定SOLR或Lucene是否在其in-

我有一个SOLR数据库,它需要有一个新字段,其中包含一个类似于标记的字符串列表,但它们是预定义的并用于内部目的。该SOLR核心的搜索结果将通过公共互联网传递给第三方网站开发者。因此,我想混淆标签,使人们不可能猜出一个会泄露另一位客户信息的标签

我可以很容易地使用guid来实现这一点,但我想知道,在RAM中有数十万条记录,并且一个字段包含多个guid的数组,会有什么影响

如果GUID被记录为原子,即GUID的一个副本和对它的多个引用,那么这不是问题。但我无法确定SOLR或Lucene是否在其in-RAM数据结构中使用原子。磁盘存储不是问题

这与重复数据消除问题类似,但我的研究表明,人们最关心的是整个重复文档,而不是单个字段。

有两个索引:

  • 倒排索引。无论使用多少次,每个guid都将存储一次(实际上不到一次)
  • 正常指数。每个guid在每次使用时都将存储一次。如果您愿意,可以在这里使用压缩。(“压缩”可能意味着您有一个特殊的表来转换数字标记,因此每个标记都存储为一个数字-->每个标记占用1个字节[假设少于2^8个标记]。)

  • 用户是第三方网站开发人员,他们将GUID作为API密钥放入URL中。他们不会直接点击SOLR,而是通过简单的代理将他们的API请求转换成SOLR搜索。SOLR的索引存储在RAM中。我知道存在某种形式的持久性,以便在进程重新启动时可以重新加载,但我只对RAM存储的效率感兴趣。每个GUID都在几十条记录上,由于有几十万条记录,它将对RAM消耗产生重大影响。@MichaelDillon:我想你指的是
    NRTCachingDirectory
    ?这只是将一个
    RAMDirectory
    包裹在一小段周围,在“效率”方面没有什么神奇的变化。它只是将文件存储在内存中。