如何使用java程序在数据库中最好地处理简单的列替换?

时间:2013-10-10 18:03:12

标签: java database file architecture

我有一张表A [id,name],据说有1000万条记录。我需要用1000万个唯一名称替换所有名称。所以,为此我有一个文本文件作为查找文件,它有1000万个名字,由新行分隔。所以,一堆问题:

  • 如何随意更换这些1000万个名字 数据库中有1000万个名字? - 我可以想到一些方法,缓存整个文件,并创建一个替换内容的映射,这样我就不会重复使用查找文件中的条目。或者使用数据库表,将查找文件加载到其中并使用这张桌子。
  • 一般来说,对于使用数据库反对使用文件的情况,写入/#次读取的数量是多少?比如说,如果您的程序正在读取文件数百万次并写入另一个文件数百万次,您会切换到使用数据库吗?什么是上限(如果有的话)?

2 个答案:

答案 0 :(得分:1)

好吧,让我们想一想,你有很多名字,它们不能全部加载到内存中,所以我们将尽可能找到解决方案。

对于随机方法,您可以在数据库中创建临时列,在其上创建唯一键并始终使用:

1)take a name on line "x" (by random or whatever you want) 
2)random record "y" in database which was not replaced yet (it can be tracked with just one boolean) 
3)try to add the name on line x to the record y AND to the same record add x to the temp column. 
4)if Unique errorcomes, it means the name was already given to someone, repeat once more with another x.

如果我们可以跟踪“x”并且我们确定,我们没有使用alredy给定的名称,我们不需要Unique修饰符。

答案 1 :(得分:1)

  1. 如果我本来就在你的位置,我会选择一个基于批处理的地方而不是随机替换这些名称,而我将以块的形式处理数据。让读者阅读块,使用处理器从文件中更新新值,使用写入器将更新后的值写回数据库。
  2. 你的第二个问题有点不清楚。决定使用文件完全基于要求。如果要获取平面文件中的数据,则必须从中读取数据。即使有数十亿行将所有数据从平面文件移动到数据库表,然后再次使用它来更新另一个表是一种过度杀伤。在更新预期的表列后,您将不必要地持久存储以后不会使用的数据。