Java 在文件中维护10亿个键:值对
使用Java,如何在一个文件中存储大约十亿个键值对,并在必要时动态更新和查询这些值?您可以使用数据库吗?管理如此大的文件将是一件痛苦的事情Java 在文件中维护10亿个键:值对,java,algorithm,Java,Algorithm,使用Java,如何在一个文件中存储大约十亿个键值对,并在必要时动态更新和查询这些值?您可以使用数据库吗?管理如此大的文件将是一件痛苦的事情 编辑:如果文件需求主要是为了避免机器通信故障、停机和类似情况,那么您可以使用嵌入式数据库。这样,您就可以从大文件操作问题中解脱出来,并且仍然可以利用数据库所能提供的所有优势。我已经用它作为一个嵌入式数据库,效果非常好。Oracle是否受支持并基于Derby。您遗漏了很多细节,但是 钥匙是静态的吗?价值观呢?它们是固定尺寸的吗?为什么不使用数据库呢 如果您不想
编辑:如果文件需求主要是为了避免机器通信故障、停机和类似情况,那么您可以使用嵌入式数据库。这样,您就可以从大文件操作问题中解脱出来,并且仍然可以利用数据库所能提供的所有优势。我已经用它作为一个嵌入式数据库,效果非常好。Oracle是否受支持并基于Derby。您遗漏了很多细节,但是 钥匙是静态的吗?价值观呢?它们是固定尺寸的吗?为什么不使用数据库呢
如果您不想使用数据库,请使用内存映射文件。如果出于某种原因数据库无法使用,则需要回答以下有关问题的问题: 以下操作的组合是什么
- 插入
- 阅读
- 修改
- 删除
- 搜寻
祝你好运老问题,但这是日志文件的情况。您不希望每次执行删除操作时都复制10亿条记录。这可以通过将所有“事务”或更新记录到新的单独文件中来解决。这些文件应该分成合理的大小 要读取元组,从最新的日志文件开始,直到找到密钥,然后停止。要更新或插入,只需在最近的日志文件中添加一条新记录。删除仍然是一个日志条目 批合并过程需要定期运行,它将扫描每个日志文件并写出另一个主文件。读取时,每个新密钥都会写入新的主密钥,重复(旧)密钥会被跳过,直到您将其全部写入。如果遇到删除记录,请在单独的删除列表中标记该记录。跳过该记录并使用该键忽略后续记录 这听起来很简单,但请记住,您可能希望阻止/分块您的文件,因为您可能会反向扫描所述日志文件,或者至少将
seek()
设置为最大大小,并反向写入而不是读取
我用数十亿行数据做了这件事。你刚刚发明了顺序存取数据库。我肯定你考虑过使用数据库?它将是什么类型的文件?如果需要,您将如何打开它?是否会打开任何10亿个记录文件?可能在一周内吗?为什么不使用数据库?祝你好运,伙计。如果有什么阻碍您,请再试一次。:)试试Redis,我不能使用数据库,不过我会建议。我正在使用文本文件。这是要求,我几乎不能改变..你能考虑有很多文件吗?不是一个大文件,而是将值分配到许多文件(可能在许多目录中),这不是我的要求:(我几乎不能改变任何被编辑的、附加的建议。键是静态的,但是如果我感谢你的建议,我必须改变价值。我会考虑这个问题。这个问题不是“文件”吗??注意:如果是“文件”,问题就出在其他地方。@CMR,你的意思是指他正在寻找一个文件或至少一个文件系统文件表示形式?如果是,那么我们只有3个选项1)重新写入1b记录每个XA,2)批XA进行顺序更改,但仍然重新写入并记录到数据文件。这是我的猜测。你说得很对,林戈正在重新发明轮子。其他人建议使用轻量级数据库、内存映射文件等。,