加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 数百万条目的SQLite优化?

发布时间:2020-12-15 23:21:42 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用SQLite数据库和Perl模块来解决问题.最后,我需要记录数以千万计的条目.每个项目唯一的唯一标识符是URL的文本字符串.我想以两种方式做到这一点: 方式#1:有一个好桌子,坏桌子,未分类的桌子. (我需要查看html并确定是否需要它.)假设我们总共有10
我正在尝试使用SQLite数据库和Perl模块来解决问题.最后,我需要记录数以千万计的条目.每个项目唯一的唯一标识符是URL的文本字符串.我想以两种方式做到这一点:

方式#1:有一个好桌子,坏桌子,未分类的桌子. (我需要查看html并确定是否需要它.)假设我们总共有10亿个页面,每个表格中有3.33亿个URL.我有一个要添加的新URL,我需要检查它是否在任何表中,如果它是唯一的,则将其添加到Unsorted.另外,我会用这个选项移动很多行.

方式#2:我有2张桌子,Master和Good. Master拥有全部10亿个页面URL,而Good拥有我想要的3.33亿个页面URL.新的URL,需要做同样的事情,除了这次我只查询一个表,我永远不会从Master中删除一行,只将数据添加到Good.

所以基本上,我需要知道最好的设置,以快速查询一个巨大的SQLite数据库,看看大约20个字符的文本字符串是唯一的,然后添加,如果不是.

编辑:我现在正试图让Berkeley DB使用Perl模块工作,但没有骰子.这就是我所拥有的:

use BerkeleyDB;

$dbFolder = 'C:somedirectory';
my $env = BerkeleyDB::Env->new ( -Home => $dbFolder );

my $db  = BerkeleyDB::Hash->new (
-Filename => "fred.db",-Env => $env );
my $status = $db->db_put("apple","red");

当我运行这个时,我得到以下内容:

Can't call method "db_put" on an undefined value at C:Directoryperlfile.pl line 42,<STDIN> line 1.

解决方法

如果未定义$db,则打开数据库失败,您应该检查$!和$BerkeleyDB ::错误,看看为什么.

你已经创建了数据库吗?如果没有,你需要-Flags => DB_CREATE.

工作范例:

use strict;
use warnings;
use BerkeleyDB;

my $dbFolder = '/home/ysth/bdbtmp/';

my $db  = BerkeleyDB::Hash->new (
    -Filename => "$dbFolder/fred.db",-Flags => DB_CREATE,) or die "couldn't create: $!,$BerkeleyDB::Error.n";

my $status = $db->db_put("apple","red");

但是,我无法让BerkeleyDB :: Env做任何有用的事情;无论我尝试什么,构造函数都返回undef.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读