探讨大数据技术,怎能漏了搜索!

一个搜索框,几个包含网页、新闻、图片、视频等在内的选项:这恐怕是目前搜索引擎留给我们大多数人的印象吧。然而,我们今天不讲搜索引擎,而是搜索技术哦~!

搜索,亦称查找,是以 “搜索的精准度”(内容匹配度)和“搜索效率”(搜索耗时)双向界定的技术。技术开发中的耗时偏指,程序员构建搜索程序时的“项目管理时间”和“程序可用的用户等待时间”。

较之Hadoop、Spark和NoSQL数据库如火如荼的发展,搜索——这一最原始、最有用的大数据技术仿佛备受冷落。当被寄予厚望的Spark等技术,随着发展渐显”非万能“的疲态,许多人的关注点便又重归搜索的优化设计。可从以下几个方面着手:

一、数据库优化设计

二、索引文件读取方式的优化设计

三、查找算法的优化设计

四、SQL语句的优化设计

五、客户端代码的优化设计

下面,我们就展开详细论述

一、数据库优化设计

1.对表建立分区

2.针对表中字段建立索引

3.优化存储

二、索引文件读取方式的优化设计

1.大文件读取方式的设计

散列映射方式的设计:通过散列或其他方式,将大文件映射为多个小文件,以减轻服务器负担。

多处理方式灵活设计:对大数据映射而来的小文件,选择合适的处理方式:单个逐步处理,并行式处理,多台机器分布式处理等

2.文件读取中缓存方式的优化

统量处理:一次性将所有数据放入缓存中,并进行处理

批量处理:将数据分批次放入缓存,并分批次进行处理。简言之便是,放一部分,取一部分,一批一批处理。

两种处理方式各有利弊,应视情况予以选择。但除此之外,我们还是会有一些发挥的空间,比如缓存的分区块或分片处理,通过分割出来的缓存区块对不同数据的分别处理,实际上便相当于设计出了一个并行处理模式。

3.流类选择及数据传输方式设计

数据传输方式,对应着程序语言相关联的流类,并视程序语言的不同,流处理也会有所区别。一般,主流程序语言对于流类的封装都比较成熟,使得程序语言对性能的优化影响并不大。但是,鉴于语言在系统搭建之初便已被选好,后期更改的空间并不大。

4.大数据读取的输出测试设计

通过每隔一段时间的输出测试,以及时定位问题。

三、查找算法的优化设计

对于大文件,散列查找和二分查找算法,仍是目前主流的实现方式。

鉴于散列算法的限制条件,在散列函数的选取中应着重考虑如下问题:

1、散列函数的选取

2、冲突处理方式

3、P值的选取

4、大文件分割

5、排序算法

其中,对于散列函数及冲突,P值的选取非常关键,越大的P值越能减少冲突,但对应着大量内存的浪费,所以,庞大的数据与有限的内存间便存在一个不小的矛盾。“分而治之”是个值得考虑的策略,即将大文件按照一定规则分割成多个小文件单独处理,但这样一来,不同文件就必须进行单独的排序和查找,也会多消耗一定的时间,具体要看我们如何权衡利弊。

四、SQL语句的优化设计

数据库对海量数据进行查询,我们主要考虑的是尽量避免进行全表查询。具体到SQL语句上来说,一篇文章对此进行了详细的阐述,具体如下(来源:http://blog.fufuok.com/Article/507.aspx):

1.对查询进行优化,应首先考虑在 where 及 order by 涉及的列上建立索引,而尽量避免全表扫描。

2.尽量避免在 where 子句中对字段进行 null 值判断,以降低引擎放弃使用索引而进行全表扫描的几率,如:

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

3.尽量避免在 where 子句中使用!=或<>操作符,以降低引擎放弃使用索引而进行全表扫描的几率。

4.尽量避免在 where 子句中使用or 来连接条件,以降低引擎放弃使用索引而进行全表扫描的几率,如:

select id from t where num=10 or num=20

可以这样查询:

select id from t where num=10

union all

select id from t where num=20

5.in 和 not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

6.下面的查询也将导致全表扫描:

select id from t where name like '�c%'

若要提高效率,可以考虑全文检索。

7. 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

select id from t where num=@num

可以改为强制查询使用索引:

select id from t with(index(索引名)) where num=@num

8.尽量避免在 where 子句中对字段进行表达式操作,以降低引擎放弃使用索引而进行全表扫描的几率。如:

select id from t where num/2=100

应改为:

select id from t where num=100*2

9.尽量避免在where子句中对字段进行函数操作,以降低引擎放弃使用索引而进行全表扫描的几率。如:

select id from t where substring(name,1,3)='abc'--name以abc开头的id

select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id

应改为:

select id from t where name like 'abc%'

select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'

10.尽量避免在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,以降低引擎放弃使用索引而进行全表扫描的几率。

(注:部分内容整合自网络)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容