- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
首先,我要感谢您在页面上提供的所有帮助,这真的很有帮助。现在我遇到了一个我无法弄清楚的情况,我希望你能帮助我,就是这样:
在我的工作场所,我可以访问一个 Oracle 数据库,其中有一个表,上面填满了用户(姓名、姓氏、生日和其他内容)。它有 1700 万条记录,对于每条记录,我需要生成一个唯一的 key (可以说它是名字的前 2 个字母加上连接的出生日期,实际上更复杂,但它只是一个例子),所以对于这个 key ,我需要检索记录,计算键,然后用键更新记录。现在超过 1700 万条记录正在杀死服务器!!
所以工作中的DB是Oracle,我把我机器上的数据复制到MYSQL数据库中进行测试。我计划在本地测试用 php 进行计算,然后创建一个 java 应用程序来在服务器上创建 key ,但这是一个巨大的工作量!!我不知道该走哪条路。简单的选择在 php 上需要 10 分钟(在 mysql 上通过命令行需要 1.49 分钟来 COUNT() 记录)
我知道最好在收到记录时计算 key 。它们以 500k 的包送达,但由于我刚到这里,数据已经合并,我必须处理这些记录。
那么对于这样的任务,你会推荐这个可怜的灵魂做什么。我当时在考虑触发器或 pl/sql,但我真的不知道什么在性能方面会更好。
非常感谢!!!
------------作为 ogres 的请求,希望你能帮助我,这是我需要为每一行做的计算的 php 代码
$vn=0;//holds the value calculated for name
$sql="select * from roots";//table holding triplets for character|number (ex: 1|A|13), field names (consecutive|character|code)
$resultados=mysql_query($sql,$idcon);
while($dato=mysql_fetch_array($resultados))//i put all of the pairs in an associative array for quicker acces
{
$consulta[$dato['v_propio']]=array($dato['caracter'],$dato['v_primo']);
}
//coding the name, for every char in the name i add to $vn, the consecutive times the position of the character in the string, plus the code for the character, if null, i add some values
$pos=1;
for ($i=0;$i<strlen($nombre);$i++)
{
$char=substr($nombre,$i,1);
$char=charnum($char);
if($char!=NULL)
{
$vn=$vn+($char*$pos)+$consulta[$char][1];
}
else
$vn=$vn + 28 + 107;
$pos++;
}
//end of name coding
// i format the code for the name to 4 digits
if ( $vn < 1000 and $vn > 99 )
$vn = '0'.$vn ;
else if ( $vn < 100 and $vn > 9 )
$vn = '00'.$vn;
else if ( $vn < 10 )
$vn = '000'.$vn;
else
$vn=$vn;
//最后,我将名称中的前两个字符与计算出的代码和生日 EX 连接起来:JH235408071984 将来自 JHON,出生于 1984 年 8 月 7 日,计算出的名称代码 = 2354
$CODE=trim(substr($nombre,0,2)).trim($vn).formatFecha($fnac);
希望对您有所帮助,您可以给我一些建议!!
最佳答案
当面对像这样的庞大数据集时,我通常会做的是首先在某个地方留出以跟踪我的位置(只需一个表就可以完成这项工作),然后一次运行 1000 个左右的结果.假设您不需要最大程度的准确性来确定将有多少条记录(假设没有巨大的漏洞),并且为了将数据用于我们的循环,我们可以获取近似的结果数像这样的查询:
SELECT MIN(ID) AS MinID, MAX(ID) AS MaxID FROM Users
假设您有一个名为 ID 的 PK 标识。与完整的 COUNT(*) 或 COUNT(1) 相比,这个查询应该非常快。然后,您可以测试我上面提到的表以查看数据是否存在,如果不存在,则从头开始,如果存在,则从您停止的地方开始处理这些 ID。对于那么多记录,这可能需要运行很长时间,但这样做可以使其能够根据需要重新运行,或者永远运行直到完成。
它最终看起来像(很多伪函数,因为我不知道您将使用哪个平台):
define("NUM_PER_ITERATION", 1000);
// Get our ID range
$query = "SELECT MIN(ID) AS MinID, MAX(ID) AS MaxID FROM Users";
$array = $MyDB->GetSingleRow($query);
$minid = (int) $array["MinID"];
$maxid = (int) $array["MaxID"];
// Get our last starting point
$startingpoint = LoadLastWorkPosition();
if (!$startingpoint || $startingpoint < $minid) {
$startingpoint = $minid;
} else if ($startingpoint > $maxid) {
echo("Already done!");
exit;
}
// Run through the values
$curstart = $startingpoint;
while ($curstart <= $maxid) {
$curend = $curstart + NUM_PER_ITERATION - 1;
// Set a time out so it will keep running, you'll know way better
// than I how long this should be for each loop
set_time_limit(300);
// Handle a number of results
HandleResults($curstart, $curend);
// Set the start of the next entry
$curstart = $curend + 1;
// Save our current progress
SaveLastWorkPosition($curstart);
}
echo("All done!");
您必须设计 LoadLastWorkPosition(它会尝试加载最后一个位置并返回 0 或 false 或者如果没有则返回其他任何值)、SaveLastWorkPosition(以便您可以跟踪您离开的位置...允许一个单独的脚本来检查值以及查看进度条或跟踪的位置)和 HandleResults(加载特定范围内的 ID 并为它们创建唯一值)。
无论如何,希望能帮助您入门!
关于java - Oracle/Mysql编辑记录量大,有推荐吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14972172/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!