请叫高手几个字符串的问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 10:34:25
我把数据库中的一列数据的全部读到内存中(数据库非常大,约100万条记录还在增加中)。

我希望拿一个数据(字符串)和已读出的数据库中的数据做比较。如果相同,就不加入数据库。如果不同,则插入库中。同时,也把新的数据加入到内存中已读出的数据中。
接下来。再取一个数据比较。如此反复。

因为在内存中操作,我想一定数据库查询要快。

问:
一、用堆与用栈哪一个快一些。
二、用什么数据结构放数据,在字符串查找比较时快一些。
三、strcmp这个比较函数是否能改写。优化的更快。
四、如果不用字符串比较,有什么办法能更快一些。

举例代码(1)(数据库读取部分简)如:
char str[10000000][50];//把数据读到这里面 设共读了条9000000
int i=9000000;

//有一个char *s的字符串要查找

for (;i>=0 && (strcmp(str[i],s))!=0; i--);

if(i==-1)
{
//在这儿做一些操作
}
else
{
printf("重复的%d:%s\n",i,str[i]);
}

或用以下方法:
char *str;
str=malloc(10000000*50);
//然后把数据读到里面
strstr(str,s);
if(s==NULL)
{
//操作
}
else
{
printf("重复的%s\n",s)l
}

除了以上的,还有什么方法更快呢?

是否能试设出更繁杂的数据结构呢?
如用哈稀表。
或改字strcmp
请大家帮我想想!!!
to 14oi:
一、linux下栈中以分配很大的空间。我是一个G的内存。分配300-500M的空间没问题

我没由自己测试.但是仍然觉得还是数据库系统的速度可能比我们另外再开发要快,至少少了读出时间.

另外,你即便是外边做过处理,在向数据库插入时,数据库仍然要进行比较.这就得不偿失了.

如果栈空间足够大,理论上是比堆要快.

一、用堆与用栈哪一个快一些。
一般环境下,栈只有1M到2M大小,是系统设置的。根本没法存放100万条数据。
即便是用堆,也不合适。当物理内存不够时就会使用虚拟内存,导致作业调度,反而比分次读入要慢。

二、用什么数据结构放数据,在字符串查找比较时快一些。
成百万的数据读取,没有索引的话,肯定特别慢。而且何必要读出来呢?直接在数据库中操作不是更好吗?把该字符串作为键建立一个视图或者表,完成插入不就行了?
如果非要读出来,用哈希表应该是最快的。但是建表本身就耗费很多时间。

三、strcmp这个比较函数是否能改写。优化的更快。
可以改成宏吧,避免反复的函数调用会快一些,但还是杯水车薪。

四、如果不用字符串比较,有什么办法能更快一些。
就是在数据库中直接操作。大型数据库系统肯定都有自己的数据组织处理方法,是外部实现的性能所不能比拟的。

查“MySQL C语言API”

“我把数据库中的一列数据的全部读到内存中”你那个想法就不对

你说:“因为在内存中操作,我想一定数据库查询要快。”
那样的话作数据库的人都要下岗了....