假设Oracle数据库中表是 Test ,字段是tagid。现在由于加密的需要,字段tagid里的每一个值都要接受传入的一个随机值random然后用hash()函数加密得到 Hash(Random+tagid)的值。现在就是要检索的输入是random和Hash(Random+tagid)两个参数。所以tagid字段里的每一个值,都要接受random,然后计算Hash(Random+tagid)与输入的值比较找到。现在问题是
1。在数据库端,这种情况下,应该索引就不管用了,有没有什么优化检索的方法。
2。下面是我的实现的语句的片段,大家看看vc能有什么优化的地方没有呢。
难道每次检索都要遍历吗?在100W条记录的数据库检索一条数据好花好几秒,这怎么受得了。以前没用过vc操作过数据库,请大虾指导一下
........//连接数据库
m_pRecordset=m_pConnection->Execute(...);
for(i=1;i<=notenumer;i++)
{
varvalue=(long)m_pRecordset->GetFields()->GetItem(long)0)->value;
hashedvalue=hash(varvalue);//hash()函数
if(hashedvalue!=prevalue) //比较传入的参数和计算后的值
{
m_pRecordset->MoveNext();
j++;
else
{
.......//统计系统运行时间
break;
}
}
}
1。在数据库端,这种情况下,应该索引就不管用了,有没有什么优化检索的方法。
2。下面是我的实现的语句的片段,大家看看vc能有什么优化的地方没有呢。
难道每次检索都要遍历吗?在100W条记录的数据库检索一条数据好花好几秒,这怎么受得了。以前没用过vc操作过数据库,请大虾指导一下
........//连接数据库
m_pRecordset=m_pConnection->Execute(...);
for(i=1;i<=notenumer;i++)
{
varvalue=(long)m_pRecordset->GetFields()->GetItem(long)0)->value;
hashedvalue=hash(varvalue);//hash()函数
if(hashedvalue!=prevalue) //比较传入的参数和计算后的值
{
m_pRecordset->MoveNext();
j++;
else
{
.......//统计系统运行时间
break;
}
}
}
解决方案 »
- MFC多线程问题
- 新手求组看看哪里的问题是椭圆还是str.format的问题
- 大虾们,怎么用回调函数传值啊?在线等,急,高手们快进,急死了!
- 请问windows2000遭到syn flood攻击怎么防御,多谢
- 晕到死 == WINDOWS
- 谁能给我一份用MMIO系列函数录音的源代码,最好是C++的而且能够运行 谢谢
- windows环境中,点击文件会连接相应的应用软件打开该文件,这是怎么实现的,高手指点
- 请问将CString类型变量的值传给char[1024]类型的,怎么传?
- 刚学ActiveX,小问题请教
- 请问哪有关于mfc打印的教程我学习学习?
- SDK如何实现:Data Time Picker 同时显示日期和时间?
- 急求BHO高手,有些难度,如何让自己的ie右键菜单运行"使用迅雷下载"这样的原菜单功能?
for(i=1;i<=notenumer;i++)
{
varvalue=(long)m_pRecordset->GetFields()->GetItem(long)0)->value;
//将random放在varvalue前面 varvalue=random//varvalue
hashedvalue=hash(varvalue);//hash()函数
if(hashedvalue!=prevalue) //比较传入的参数和计算后的值
{
m_pRecordset->MoveNext();
j++;
else
{
.......//统计系统运行时间
break;
}
}
}
hash(random//tagid) /*将随机生成的字符串random放在tagid前*/
然后与传入的这个值比较,找到这条记录.也就是说传入的参数,有random和硬件平台生成 hash(random//tagid)值,这两个参数
这不是很难理解吧
能否写到服务器去?
然后hash(xxx/*要查找的东西*/),得到结果之后再到数据库里select ...where ....
数据库中存放的是tagid,你保存hash过的值没有用啊,每一次的random值都是不一样的.而且hash函数是不可逆的.不能由hash(random//tagid)反向得到其中的taigid.
现在我最想知道的是我的vc语句中有没有可以优化的地方.比如说
m_pRecordset=m_pConnection->Execute(...);
m_pRecordset->Open(....);
m_pCommand->Execute(...);
这三种操作数据集的方法有什么不同,那种最快呢?
另外,数据库就在我的本机上,hash放在数据库内能加快吗?而且hash函数中含有很多的二进制位移运算...不知道oracle支持不..
似乎支持prepare sql啊……你执行的sql是不是select where样式的?如果是,就可以用prepare 方式执行……2。oracle应该支持吧?就算不支持,oracle他支持java啊,java是程序语言,肯定支持如算法啊,二进制计算啊之类的吧?写个java过程,让oracle调用,好像oracle可以象调用普通存储过程一样调用java代码的……希望我没说错……
愿意咋实现就咋实现:)
m_pCommand->Execute(...);
似乎支持prepare sql啊……你执行的sql是不是select where样式的?如果是,就可以用prepare 方式执行……
恩....这是最快的吗?试一试