在特别大的数据里你是如何判断字符串是否存在的
在特别大的数据里你是怎么判断字符串是否存在的?
我需要不断的采集一些网址,采集后我存在哪里比较好?直接存在控件?还是txt里?然后我后面采集的网址还需要判断这个网址是否已经存在了。可以肯定的是 随着程序的运行,肯定存储的数据是越来越多的,那么我存在哪里会比较好呢?如果我存在数据库每次采集回来一个网址都要读取数据库,岂不是很麻烦吗?如果我存在txt 内存不够怎么办呢?保守估计 我能采集几百万上千万的网址,预计存在txt里会有大概几百兆吧,就是对这里没什么好的主意,有做过类似东西的同学给个思路吗?
------解决思路----------------------
几百兆,小意思了
至于存数据库,还是不存数据库,其实无所谓!
这点数据存数据库里,就是不做索引都无压力,如果做了索引就更无压力了
至于你担心地问题,其实你只要稍微了解一下,B tree,hash,索引这类知识,你就会明白,其实数据库也不会真傻到全表遍历这样几百万数据这样的操作
反倒是现在那个高大上地号称是大数据之神地hadoop是采用全表(至少是大部分表)地操作,不过人家的目标不同---他其实更应该叫大量文件处理比较合理(每个数据到不会太大地离谱,但是文件多地离谱)
------解决思路----------------------
我觉得还是要数据库
犯不上每条网址的查询都要连接数据库的,你可以在程序启动的时候从数据库中将数据读到内存对象,采集的时候只要在内存对象中进行查询就可以了,不存在的网址就插入内存对象,譬如满了一百个就批量存到数据库。
------解决思路----------------------
1、我能采集几百万上千万的网址,预计存在txt里会有大概几百兆吧
不说多,就几百万个网址吧,按几百兆计算,一个网址也就百十来的字符内容。这现实吗?
2、无论你存在哪里,只要你打算检查某个网址是否已经处理过了,那就必然有一个检索过程
你只需要找一个适合快速检索的数据结构,存放已处理过的网址就可以了
3、大量的采集,必定不是一个程序一次运行就可完成的。所以你需要有可共享的数据载体,以便多个程序同时进行处理
4、显然自己从0开始写一个这样的存储系统是划不来的,既然有现成的数据库系统(基于内存的 noSQL也是数据库)可用,为何不去用一下呢?
如果我存在数据库每次采集回来一个网址都要读取数据库,岂不是很麻烦吗?
这个想法、做法本身就是欠妥的
实际上,数据库在这里充当了重要角色
采集程序从数据库中读取未采集的网址,采集回数据存入数据库
分析程序从数据库中读取未分析的数据进行分析,解析出其中的连接存入数据库,供采集程序使用
只要数据库里有需要处理的数据,整个过程就会循环往复的进行
------解决思路----------------------
你又误入歧途了,你还没理解他的意思,你就直接存到数据库,对于每个采集来的新网址来说,你的查询sql语句很简单的,并且数据库对查询是有复用功能的,第一次查的时间会稍稍多一点,但后面的会很快,你也可以通过创建索引、将查询语句放到存储过程来优化检索速度,总之,你太小瞧数据库的能力了。
我需要不断的采集一些网址,采集后我存在哪里比较好?直接存在控件?还是txt里?然后我后面采集的网址还需要判断这个网址是否已经存在了。可以肯定的是 随着程序的运行,肯定存储的数据是越来越多的,那么我存在哪里会比较好呢?如果我存在数据库每次采集回来一个网址都要读取数据库,岂不是很麻烦吗?如果我存在txt 内存不够怎么办呢?保守估计 我能采集几百万上千万的网址,预计存在txt里会有大概几百兆吧,就是对这里没什么好的主意,有做过类似东西的同学给个思路吗?
------解决思路----------------------
几百兆,小意思了
至于存数据库,还是不存数据库,其实无所谓!
这点数据存数据库里,就是不做索引都无压力,如果做了索引就更无压力了
至于你担心地问题,其实你只要稍微了解一下,B tree,hash,索引这类知识,你就会明白,其实数据库也不会真傻到全表遍历这样几百万数据这样的操作
反倒是现在那个高大上地号称是大数据之神地hadoop是采用全表(至少是大部分表)地操作,不过人家的目标不同---他其实更应该叫大量文件处理比较合理(每个数据到不会太大地离谱,但是文件多地离谱)
------解决思路----------------------
我觉得还是要数据库
犯不上每条网址的查询都要连接数据库的,你可以在程序启动的时候从数据库中将数据读到内存对象,采集的时候只要在内存对象中进行查询就可以了,不存在的网址就插入内存对象,譬如满了一百个就批量存到数据库。
------解决思路----------------------
1、我能采集几百万上千万的网址,预计存在txt里会有大概几百兆吧
不说多,就几百万个网址吧,按几百兆计算,一个网址也就百十来的字符内容。这现实吗?
2、无论你存在哪里,只要你打算检查某个网址是否已经处理过了,那就必然有一个检索过程
你只需要找一个适合快速检索的数据结构,存放已处理过的网址就可以了
3、大量的采集,必定不是一个程序一次运行就可完成的。所以你需要有可共享的数据载体,以便多个程序同时进行处理
4、显然自己从0开始写一个这样的存储系统是划不来的,既然有现成的数据库系统(基于内存的 noSQL也是数据库)可用,为何不去用一下呢?
如果我存在数据库每次采集回来一个网址都要读取数据库,岂不是很麻烦吗?
这个想法、做法本身就是欠妥的
实际上,数据库在这里充当了重要角色
采集程序从数据库中读取未采集的网址,采集回数据存入数据库
分析程序从数据库中读取未分析的数据进行分析,解析出其中的连接存入数据库,供采集程序使用
只要数据库里有需要处理的数据,整个过程就会循环往复的进行
------解决思路----------------------
你又误入歧途了,你还没理解他的意思,你就直接存到数据库,对于每个采集来的新网址来说,你的查询sql语句很简单的,并且数据库对查询是有复用功能的,第一次查的时间会稍稍多一点,但后面的会很快,你也可以通过创建索引、将查询语句放到存储过程来优化检索速度,总之,你太小瞧数据库的能力了。