上亿条数据查询解决方案?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上亿条数据查询解决方案?相关的知识,希望对你有一定的参考价值。

数据库有上亿条商品数据

需要处理大量按商品名称的模糊查询(假设商品名称的分词已经实现了,也就是用多个关键字来查询)

我最本来是这样设想的:

建立一个商品名称索引表:ID,Name,ProductID 三个字段

ID自增

Name(分词程序对商品名称进行分词后,保存下来的一个词),

ProductID,商品名称包含该词的商品ID(varchar(max)字段,任何包含该词的商品ID都存在这个字段

问题就是到了这里,比如一个词:黑色,可能包含黑色这个词的商品名称有N多个,就算我知道了这些商品ID处理起来也很麻烦了。

还有在网上看到很多资料,说这么大数据量要进行数据分区,但如果搜索名称字段的话,我必须要进行全表扫描才能得到想要的数据啊?

请大家帮我分析下,我该怎么处理啊?

参考技术A 数据库有上亿条商品数据

需要处理大量按商品名称的模糊查询(假设商品名称的分词已经实现了,也就是用多个关键字来查询)

我最本来是这样设想的:

建立一个商品名称索引表:ID,Name,ProductID 三个字段

ID自增

Name(分词程序对商品名称进行分词后,保存下来的一个词),

ProductID,商品名称包含该词的商品ID(varchar(max)字段,任何包含该词的商品ID都存在这个字段

问题就是到了这里,比如一个词:黑色,可能包含黑色这个词的商品名称有N多个,就算我知道了这些商品ID处理起来也很麻烦了。

还有在网上看到很多资料,说这么大数据量要进行数据分区,但如果搜索名称字段的话,我必须要进行全表扫描才能得到想要的数据啊?

请大家帮我分析下,我该怎么处理啊?
参考技术B ProductID 用varchar(max)不行。最好限制在比如nvarchar(100).同时ID 没有用。还不如直接ProductID 做主键,或者用ProductID, Name 做主键。

分区可能需要但在模糊查询中没有什么帮助。

如何在十分钟内插入1亿条记录到Oracle数据库?

这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能。

 

-- Create table

create table TMP_TEST_CHAS_LEE

(

f01 VARCHAR2(20),

f02 NUMBER(10) not null,

f03 VARCHAR2(21),

f04 VARCHAR2(21),

f05 NUMBER,

f06 NUMBER(20)

);

 

--创建一个临时表,用于提供序列号

CREATE GLOBAL TEMPORARY table t_sequence_num(

sequenceNum number(8) not null

)

ON COMMIT PRESERVE ROWS;

 

 

--开始插入数据

 

begin

--先生成1万个序号

delete from t_sequence_num;

for i in 0..9999 loop

insert into t_sequence_num(sequenceNum) values(i);

end loop;

 

--使用APPEND提示,每次1万条,进行数据插入

for i in 1..10 loop

insert /*+ append */ into TMP_TEST_CHAS_LEE

(f01, f02, f03, f04, f05, f06)

select

8613800000000 + i * 10000 + t_sequence_num.sequencenum as MSISDN,

‘12106000‘,

0,

‘20120312072000‘,

‘500231891000‘,

null

from t_sequence_num;

 

--每批次必须要提交一次

commit;

 

end loop;

end;

/

 
可以看出,这种方法的关键是使用了 APPEND 提示,也就是使用了 Direct Path Insert.
效果非常惊人,上亿的数据,十分钟左右就搞定了,也就是说,每秒钟插入了超过10万条以上的记录。
 
这个方法很简单,就是要利用 APPEND提示,方法就是需要有个序列表,来辅助数据生成。
 
性能测试人员不用耗费大量的时间来等待测试数据生成了。
 
需要注意的问题:
1. 插入数据时,表上不要建立索引
2. 可以在数据插入完毕后,通过 nologging 和 parallel 来创建索引
3. 这里默认是1万条记录提交一次,可以改的更大,应该会更快
4. APPEND方式插入数据后,必须要提交后才能对表进行其它操作
5. 生成的数据的每个字段都是可以根据自己的需要灵活产生的

以上是关于上亿条数据查询解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

想建个数据库,要保存上亿条商品价格信息,用哪个数据库系统合适

原创关于表结构更改的大量数据的迁移方案

原创关于表结构更改的大量数据的迁移方案

如何在十分钟内插入1亿条记录到Oracle数据库?

Memcache 缓存系统

怎么解决SQLite数据库删除大数据后执行“VACUUM”效率低的有关问题