首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >sqlite3 -将数据库添加到索引数据库和索引新行

sqlite3 -将数据库添加到索引数据库和索引新行
EN

Stack Overflow用户
提问于 2016-06-28 13:11:22
回答 2查看 70关注 0票数 0

在sqlite3中,假设我有一个索引数据库,这里的索引意味着所有表行中的每个字符串信息都已被整数替换,并且在包含整数和字符串映射的所有表上为每个字段都有一个表。

现在,我想在我的索引数据库中添加另一个尚未以这种方式处理的数据库--即仍然存在行中的实际字符串。这些表具有完全相同的结构,因此对于新数据库中的每个表,我会将所有行添加到旧数据库中的相应表中--但是使用整数替换字符串w.r.t。旧数据库中的字符串-整数映射(并更新新数据库中未在旧数据库中看到的字符串的映射)。

有什么更好的方法吗?

应用程序将是一个分布式索引过程,我在其中运行大约。10个作业用较小的数据库填充FIFO队列,我运行一个作业从队列中选择数据库,索引它们并将它们添加到最终的大数据库中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-30 11:42:52

我从python访问了数据库。

我最后所做的是将内存中的索引结构作为python对象来维护,直到所有包含内容的整数行都添加到新的数据库中为止。这允许我通过executemany()函数进行批量插入。将所有行添加到数据库后,python索引对象将大量插入到数据库中。

这与动态使用数据库作为索引结构相比,工作速度非常快。然而,它至少有以下两个缺点:

  1. 存储的值不能是索引表项的外键(但整数不是那么大)。
  2. (python)索引对象需要放入内存(在另一种语言中,它可能需要的内存比python少得多)

我不得不说,我没有尝试使用SSD,这可能会使基于内存的方法变得不必要。

票数 0
EN

Stack Overflow用户

发布于 2016-06-28 16:22:38

索引表如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE data ( ColX INTEGER, ColY INTEGER );
-- foreign key constraints omitted

让我们假设索引表对string列有一个唯一的约束:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE ColX_strings ( ID INTEGER PRIMARY KEY, Text TEXT UNIQUE );
CREATE TABLE ColY_strings ( ID INTEGER PRIMARY KEY, Text TEXT UNIQUE );

然后,我们可以简单地使用插入或忽略来添加那些新的字符串,即不与任何旧字符串冲突的字符串:

代码语言:javascript
代码运行次数:0
运行
复制
INSERT OR IGNORE INTO ColX_strings(Text) SELECT ColX FROM newDB.data;
INSERT OR IGNORE INTO ColY_strings(Text) SELECT ColY FROM newDB.data;

现在所有的字符串都是已知的,所以我们只需在复制时查找它们:

代码语言:javascript
代码运行次数:0
运行
复制
INSERT INTO oldDB.data(ColX, ColY)
SELECT (SELECT ID FROM ColX_strings WHERE Text = T.ColX),
       (SELECT ID FROM ColY_strings WHERE Text = T.ColY)
FROM newDB.data AS T;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38077231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档