小编has*_*ble的帖子

需要内存有效的方法来存储大量的字符串(是:在Java中的HAT-Trie实现)

我正在使用一大组(5到2千万)字符串键(平均长度为10个字符),我需要将其存储在内存数据结构中,该结构在恒定时间或接近恒定时间内支持以下操作:

// Returns true if the input is present in the container, false otherwise
public boolean contains(String input)
Run Code Online (Sandbox Code Playgroud)

就吞吐量而言,Java的Hashmap证明是令人满意的,但占用了大量内存.我正在寻找一种内存效率高的解决方案,并且仍然支持良好的吞吐量(与散列相当或几乎一样好).

我不关心插入/删除时间.在我的应用程序中,我将仅执行插入(仅在启动时),并且随后将仅使用contains应用程序生命周期的方法查询数据结构.

我读到HAT-Trie数据结构最接近我的需求.我想知道是否有一个具有实现的库.

其他建议与实现的指针欢迎.

谢谢.

java hash trie bloom-filter data-structures

28
推荐指数
1
解决办法
1万
查看次数

可扩展(50万个文件)版本控制系统

我们使用SVN进行源代码修订控制,并正在尝试将其用于非源代码文件.

我们正在处理大量(300-500k)短(1-4kB)文本文件,这些文件将定期更新并需要对其进行版本控制.我们尝试在平面文件模式下使用SVN,它正在努力处理第一次提交(签入500k文件)大约需要36小时.

每天,我们需要系统能够在短时间内(<5分钟)处理每次提交事务的10k个修改文件.

我的问题:

  1. SVN是否适合我的目的.实际使用时,初始速度似乎太慢.
  2. 如果是,是否有特定的svn服务器实现快速?(我们目前正在使用gnu/linux默认的svn服务器和命令行客户端.)
  3. 如果不是,最好的f/oss /商业替代品是什么

谢谢


编辑1:我需要版本控制,因为多个人将同时修改相同的文件,并将以与程序员编辑源代码完全相同的方式进行手动差异/合并/解决冲突.因此,我需要一个中央存储库,人们可以检查他们的工作并查看其他人的工作.工作流程几乎与编程工作流程相同,只是用户不是程序员,文件内容不是源代码.


更新1:事实证明,主要问题更多的是文件系统问题,而不是SVN问题.对于SVN,即使在24小时后,提交具有50万个文件的单个目录也没有完成.在1x5x10x10树中排列的500个文件夹中拆分相同的文件,每个文件夹有1000个文件,因此提交时间为70分钟.对于包含大量文件的单个文件夹,提交速度会随着时间的推移而显 Git似乎要快得多.会随着时间而更新.

svn git cvs version-control mercurial

18
推荐指数
3
解决办法
4037
查看次数

大数据模式匹配的数据结构

问题背景

我有一个包含10个符号的有限词汇[AJ].这些符号的含义与问题无关.它们可以是DNA碱基,音素,单词等.

项是一系列符号.在这个问题中,所有项目都具有相同的长度(例如6).例如

A C B A D J
Run Code Online (Sandbox Code Playgroud)

我有一个大的(5M)表,其中包含从一些已知数据中采样的所有长度为6的项目的计数.例如

A C B A D J     55
B C B I C F     923
A B C D E G     478
Run Code Online (Sandbox Code Playgroud)

给定一个带有一个未知符号的新序列,我的任务是猜测符号.在以下示例中,缺少的符号是.

B C B ? C F
Run Code Online (Sandbox Code Playgroud)

一个简单的猜测解决方案是查看我的表格,找到符合该模式的最大计数项目B C B ? C F

问题

  1. 什么是良好的数据结构来存储我的项目频率表,以便合理有效地处理时空?如果查询时的计算是合理的,我更喜欢使用更少的内存.(我将有很多这样的表格,因此5M数字只是一个近似值.)

  2. 哪些实现细节可以对处理速度产生很大影响?

我想到的事情:

  1. 从每个序列中创建一个字符串并使用正则表达式进行匹配.警告:1.O(n)是不可接受的.(2)正则表达速度很慢.(3)字符串(至少在java中)是膨胀的.

  2. 让Lucene处理索引.关闭tfidf得分.使用短语搜索.潜在地使用计数值进行评分,以便Lucene也负责排序.

  3. 使用前缀和后缀尝试索引每个项目.

  4. 使用db(可能在内存中)将整个数据放在一个/单独的列中来处理搜索.


更新

  1. 在我的实际应用中,我将使用单独存储的长度为5,6,7,8,9,10的序列.我通过将其限制为固定长度来简化问题.因此,对使用较少内存的解决方案的约束/偏好.
  2. 我的词汇量可以假设不到20岁.

lucene algorithm hash pattern-matching data-structures

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

键盘布局库,在给定输入键的情况下查找相邻键(最好是java)

有没有人知道一个库(最好是java)可以给我相邻的键给定US_ENGLISH标准键盘的键输入?

例如,如果我输入字符'd',我应该返回以下字符:[w,e,r,s,f,x,c,v].

或者,网格操作api也可以工作(这样我可以实例化具有qwerty键盘布局的网格并使用它来查找我的邻居).

注1:我使用'character'和'key'这两个词来代表字符.

注2:我知道我可以硬编码一种方法来将50个左右的主键映射到它们的邻居.我正在寻找更好的解决方案.

谢谢.

java api keyboard keyboard-layout

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

Autoformat pom.xml不使用m2eclipse插件

我在Eclipse中开发时不使用Eclipse maven插件.

我使用以下命令在外部生成Eclipse类路径:

mvn eclipse:eclipse
Run Code Online (Sandbox Code Playgroud)

这已经工作了很长时间,我不倾向于添加maven插件.

但是,我希望能够"autoformat"我的pom.xml文件.

我的pom.xml没有显示为"源"文件,因此上下文"源"菜单没有显示.

Control-Shift-F也不起作用.

有没有办法在不安装m2eclipse插件的情况下执行此操作?是否有任何其他通用的"XML编辑器"插件可以帮助解决这个问题?

eclipse maven-2 code-formatting m2eclipse pom.xml

3
推荐指数
1
解决办法
3466
查看次数