0

我有一个表 A [id,name],它有大约 1000 万条记录。我需要用 1000 万个唯一名称替换所有名称。因此,为此,我有一个文本文件作为查找文件,其中包含 1000 万个名称,由换行符分隔。所以,一堆问题:

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

2 回答 2

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”并且我们确定,我们没有使用已经给定的名称,我们不需要唯一修饰符。

于 2013-10-10T18:17:22.403 回答
1
  1. 如果我在您的位置,而不是随机替换名称,我会选择基于批处理的方法,在该方法中我将分块处理数据。有一个读取器读取块,一个处理器从文件更新新值,一个写入器将更新的值写回数据库。
  2. 你的第二个问题有点不清楚。使用文件的决定纯粹是基于需求。如果您要获取平面文件中的数据,则必须从中读取。即使有数十亿行将所有数据从平面文件移动到数据库表,然后再次使用它来更新另一个表,这也是一种矫枉过正的做法。一旦更新了预期的表列,您将不必要地保留以后不会使用的数据。
于 2013-10-10T18:19:23.677 回答