我们正在设计一个大规模的网络抓取/解析项目.基本上,脚本需要浏览网页列表,提取特定标记的内容,并将其存储在数据库中.你会建议用什么语言大规模(数千万页?)..
我们正在将MongoDB用于数据库,因此任何具有可靠MongoDB驱动程序的东西都是优先考虑的.
到目前为止,我们一直在使用(不要笑)PHP,curl和Simple HTML DOM Parser,但我不认为它可以扩展到数百万个页面,特别是因为PHP没有适当的多线程.
我们需要一些易于开发的东西,可以在Linux服务器上运行,具有强大的HTML/DOM解析器以轻松提取该标签,并且可以在合理的时间内轻松下载数百万个网页.我们并不是真的在寻找网络抓取工具,因为我们不需要关注链接并索引所有内容,我们只需要从列表中的每个页面中提取一个标记.
我正在尝试创建一个Python脚本,该脚本将地址作为输入,并且会在多次匹配的情况下吐出其纬度和经度,或纬度和经度,就像Nominatim一样.
因此,可能的输入和输出可能是: -
在上面的6中,纽约被归还,因为找不到地址103 Alkazam, New York, USA,但它至少可以找到New York, USA.
最初我想到构建一个树,表示兄弟姐妹按字母顺序排序的层次结构关系.可能是这样的: -
GLOBAL
|
---------------------------------------------
| | ...
USA
---------------
| | ...
CALIFORNIA NEW YORK
| |
----------- -------------
| |.. | |....
PEARL STREET PEARL STREET
Run Code Online (Sandbox Code Playgroud)
但问题是用户可以提供不完整的地址,如2,4和5. …
python geocoding large-data-volumes large-data openstreetmap
我有大型数据集(10 Hz数据,每24小时864k点),我需要实时绘制.这个想法是用户可以缩放和平移到非常详细的散点图.
数据不是很连续,而且有峰值.由于数据集太大,每次绘图刷新时都无法绘制每个点.
但我也不能只是绘制每一个点,否则我会错过大而短的尖峰等主要特征.
Matlab做得对.你可以给它一个864k向量的零,只需将任意一个点设置为1,它就可以用缩放和平移实时绘制.
Matlab如何做到这一点?
我的目标系统是Java,所以我将在Swing/Java2D中生成该图的视图.
我需要编写一个C++应用程序来读取和写入大量数据(超过可用的RAM),但总是按顺序方式.
为了使数据保持未来的证明和易于记录的方式,我使用Protocol Buffer.然而,协议缓冲区不处理大量数据.
我以前的解决方案包括为每个数据单元创建一个文件(并将它们全部存储在一个目录中),但这似乎不是特别可扩展.
这次我想尝试使用嵌入式数据库.为了具有类似的功能,我只需要存储key-> values关联(因此sqlite似乎有点矫枉过正).值将是Protocol Buffer的二进制序列化输出.
我希望数据库能够管理"内存中的内容,移动到磁盘上的内容"问题,"如何有效地在磁盘上存储大量数据"问题,理想情况下,优化我的顺序读取模式(通过阅读事前的下一个条目).
寻找替代品我对缺乏替代品感到惊讶.我不想将数据库保留在一个单独的进程中,因为我不需要这种分离(这排除了redis).
我发现的唯一选择是Berkeley DB,但它有一个令人不快的低级别C api.然后,我找到的最佳选择是在Berkeley DB之上的stldb4.API似乎非常好,符合我的需求.
不过我很担心.stldb4似乎很奇怪(它依赖于libferris的东西),非维护的解决方案(一年前的最后一个版本),对于我会遇到的问题很常见.
你们中有谁对如何管理这个问题有更好的建议吗?
谢谢你的回答.
在我的管理部分,当我编辑项目时,我必须将每个项目附加到父项目.我有一个超过24,000个父项的列表,它们按字母顺序列在下拉列表中(音乐艺术家列表).
在下拉菜单中列出所有这些项目的编辑页面是2MB,对于拥有旧计算机的人来说,它就像疯了一样,特别是在Internet Explorer中.
什么是复制相同功能的好选择,我需要选择这24,000位艺术家中的一位,而不是将它们全部预先加载到下拉菜单中.
我正在寻找jQuery网格建议,并遇到了这个问题/答案:https: //stackoverflow.com/questions/159025/jquery-grid-recommendations
通过查看许多jQuery网格解决方案,似乎他们都希望在客户端上拥有整个数据集.如果我有一个大型数据集(数千/数百万条记录),这些类型的解决方案显然不能很好地扩展(或根本不工作)
我的问题:那里有jQuery网格解决方案,使用Ajax一次只选择一个页面吗?我期望在服务器端使用从客户端通过ajax传入的参数来处理分页,排序等.
提前致谢,
--ed
更新:我使用FlexiGrid取得了巨大成功 - 应用程序的其余部分是ASP.NET MVC2.唯一的问题是你需要修改ASP.NET MVC附带的Site.css,因为它为所有表格,td和th标签(填充)指定了一个混淆了flexigrid L&F的样式.
更新2:在fishysplash上,如果您计划使用不同数据表的多个网格,则可以很好地实现动态生成必要的JavaScript代码. http://fishysplash.com/adding-grids-using-flexigrid
我只是想知道是否有人知道大型稀疏矩阵的奇异值分解(SVD)的java实现?我需要这个实现潜在语义分析(LSA).
我尝试了来自UJMP和JAMA的软件包,但当行数> = 1000且col> = 500时,它们会窒息.如果有人能指出我的伪代码或其他东西,那将非常感激.
我必须通过没有那么多带宽的网络管道转储大型数据库,而其他人需要同时使用.如果我尝试它,它会吸收所有带宽和延迟,并且其他所有人都会搞砸.
我知道mysqldump的--compress标志有点帮助.
如何在不通过此连接吸收所有带宽的情况下执行此操作?
更新:
使用带有-l标志的scp复制转储文件的建议是一个很好的建议,但我应该注意,我没有对数据库服务器的SSH访问权限.
我目前正在运行一个awk脚本来处理一个大的(8.1GB)访问日志文件,它需要永远完成.在20分钟内,它写了14MB的(1000 + - 500)MB我期望它写的,我想知道我是否能以某种方式更快地处理它.
这是awk脚本:
#!/bin/bash
awk '{t=$4" "$5; gsub("[\[\]\/]"," ",t); sub(":"," ",t);printf("%s,",$1);system("date -d \""t"\" +%s");}' $1
编辑:
对于非awkers,脚本读取每一行,获取日期信息,将其修改为实用程序date识别的格式,并将其调用以将日期表示为自1970年以来的秒数,最后将其作为.csv文件的行返回,以及知识产权.
输入示例: 189.5.56.113 - - [22/Jan/2010:05:54:55 +0100]"GET(...)"
退货产出: 189.5.56.113,124237889
现在我们有一个1.000.000的firebird数据库,必须在将所有内容加载到RAM内存后处理.要获得所有这些,我们必须使用(选择*前1000 ...)提取数据8小时.这是什么解决方案?
java ×2
large-data ×2
apache ×1
awk ×1
c++ ×1
css ×1
geocoding ×1
grid ×1
jquery ×1
linux ×1
matlab ×1
mysql ×1
networking ×1
optimization ×1
parsing ×1
plot ×1
python ×1
sql ×1
text-mining ×1
zoom ×1