上亿条数据查询解决方案?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上亿条数据查询解决方案?相关的知识,希望对你有一定的参考价值。
数据库有上亿条商品数据
需要处理大量按商品名称的模糊查询(假设商品名称的分词已经实现了,也就是用多个关键字来查询)
我最本来是这样设想的:
建立一个商品名称索引表:ID,Name,ProductID 三个字段
ID自增
Name(分词程序对商品名称进行分词后,保存下来的一个词),
ProductID,商品名称包含该词的商品ID(varchar(max)字段,任何包含该词的商品ID都存在这个字段
问题就是到了这里,比如一个词:黑色,可能包含黑色这个词的商品名称有N多个,就算我知道了这些商品ID处理起来也很麻烦了。
还有在网上看到很多资料,说这么大数据量要进行数据分区,但如果搜索名称字段的话,我必须要进行全表扫描才能得到想要的数据啊?
请大家帮我分析下,我该怎么处理啊?
需要处理大量按商品名称的模糊查询(假设商品名称的分词已经实现了,也就是用多个关键字来查询)
我最本来是这样设想的:
建立一个商品名称索引表: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;
/
4. APPEND方式插入数据后,必须要提交后才能对表进行其它操作
以上是关于上亿条数据查询解决方案?的主要内容,如果未能解决你的问题,请参考以下文章