目錄
筆記大型項(xiàng)目優(yōu)化概述大型項(xiàng)目優(yōu)化的方向代碼優(yōu)化數(shù)據(jù)庫優(yōu)化緩存優(yōu)化架構(gòu)優(yōu)化Memcache與MySQL比較語法參數(shù)解釋:增/改鍵(set)獲取鍵值(get)添加鍵數(shù)據(jù)(add)修改鍵數(shù)據(jù)(replace)刪除鍵(delete)刪除所有鍵(flush_all)遞增(incr)和遞減(decr)查看當(dāng)前Memcached運(yùn)行狀態(tài)(stats)PHP操作memcacheMemcache的相關(guān)算法Redis字符串(string)哈希(Hash)列表(List)集合(Set)有序集合(Sorted Set)鍵(Key)Mysql優(yōu)化如何優(yōu)化MySQL三范式(設(shè)計(jì)表的規(guī)則)設(shè)計(jì)表:設(shè)計(jì)表推薦如下字段存儲(chǔ)引擎MyIsam和InnoDB存儲(chǔ)引擎區(qū)別慢查詢?nèi)罩?/a>索引MySQL中的執(zhí)行計(jì)劃分析查詢類型(select_type)分析表名(table)分析額外項(xiàng)(extra)分析連接所使用的類型(type)索引的使用原則(哪些常見情況不能用索引?)前綴索引limit分頁優(yōu)化(百萬至千萬級(jí)快速分頁)分表技術(shù)為什么需要MySQL分表/分區(qū)分區(qū)算法分區(qū)算法介紹分區(qū)語法分區(qū)管理SphinxSphinx使用流程安裝sphinx配置Sphinx創(chuàng)建索引使用PHP API操作Sphinx匹配模式增量索引(Sphinx索引更新)MongoDB概念什么是NoSQL創(chuàng)建MongoDB服務(wù)連接MongoDB服務(wù)器入門命令庫和集合操作增刪改查
筆記
大型項(xiàng)目優(yōu)化概述
簡單理解:讀取源碼-》詞法分析-》創(chuàng)建opcode-》執(zhí)行opcode重復(fù)創(chuàng)建會(huì)增加額外的內(nèi)存和cpu開銷
解決方案:安裝ZendOptimizer或APC2.0等可以加速PHP代碼訪問放可,主要用于緩存opcode而不是每次重復(fù)編譯減少CPU和內(nèi)存開銷(php5.5+后不需要安裝第三方軟件,直接開啟PHP配置文件中Opcache即可琐谤。
大型項(xiàng)目優(yōu)化的方向
代碼優(yōu)化
開啟opcode緩存赔桌,減少額外CPU和內(nèi)存開銷代赁,加快代碼運(yùn)行速度
重模型掩宜,輕控制器戚扳,減少冗余
符合PHP-FIG規(guī)范和phpDoc規(guī)范,增強(qiáng)代碼可讀性&可擴(kuò)展性魁巩,有利于團(tuán)隊(duì)開發(fā)
類: 花括號(hào)獨(dú)占一行
類中方法:華括號(hào)獨(dú)占一行
類名:大駝峰
方法名:小駝峰
命名空間:后面空一行
常量名:大寫急灭,多個(gè)單詞用下劃線分割
數(shù)據(jù)庫優(yōu)化
架構(gòu):主從復(fù)制、讀寫分離
設(shè)計(jì):存儲(chǔ)引擎谷遂、字段類型葬馋、三范式
功能:緩存、分區(qū)肾扰、索引
緩存優(yōu)化
好處:減少數(shù)據(jù)庫查詢畴嘶,將數(shù)據(jù)緩存到文件或內(nèi)存中,加快查詢數(shù)據(jù)
實(shí)現(xiàn):
內(nèi)存(memcache集晚、redis)
文件(使用TP3.2的大S或大F方法窗悯,TP5中的Cache類)
內(nèi)存速度>文件速度>數(shù)據(jù)庫速度
架構(gòu)優(yōu)化
負(fù)載均衡:將用戶請(qǐng)求分配給多個(gè)服務(wù)器處理(輪詢、ip哈希)
集群:多個(gè)服務(wù)器實(shí)現(xiàn)相同的業(yè)務(wù)
動(dòng)靜分離:將靜態(tài)資源單獨(dú)放一臺(tái)服務(wù)器
主從復(fù)制:insert/update/delete到主服務(wù)器執(zhí)行偷拔,所有從服務(wù)器檢測(cè)大主服務(wù)器有寫入數(shù)據(jù)則自動(dòng)同步
讀寫分離:通過PHP判斷蟀瞧,如果是insert/update/delete交給主服務(wù)器處理,如果是select交給從服務(wù)器處理
CDN加速:將靜態(tài)資源緩存到用戶所在城市条摸,加快訪問速度
Memcache
概念:一個(gè)數(shù)據(jù)庫,但是數(shù)據(jù)存在內(nèi)存中
作用:常用來做緩存服務(wù)器铸屉、將從數(shù)據(jù)庫查詢的數(shù)據(jù)緩存起來钉蒲,減少數(shù)據(jù)庫查詢、加快查詢速度
數(shù)據(jù)存儲(chǔ)在內(nèi)存中系統(tǒng)重啟則丟失
與MySQL比較
共同點(diǎn):都是C/S架構(gòu)
不同點(diǎn):MySQL存磁盤文件彻坛、memcache存在內(nèi)存中
不同點(diǎn):MySQL存儲(chǔ)數(shù)據(jù)要先創(chuàng)建數(shù)據(jù)庫再創(chuàng)建表顷啼、memcache直接以鍵值對(duì)形式存儲(chǔ)
鍵key值value
字符串(唯一)字符串、整數(shù)昌屉、浮點(diǎn)數(shù)钙蒙、布爾、數(shù)組间驮、對(duì)象躬厌、NULL、二進(jìn)制數(shù)據(jù)(圖片竞帽、視頻扛施、音頻)
語法參數(shù)解釋:
鍵? ? ? - 最大長度不超過250字符
是否壓縮? -? 1-是鸿捧,0-否(以空間換時(shí)間)
緩存時(shí)間? -? 0-理論永久,其他-單位秒(注:最大存儲(chǔ)時(shí)間30天)
數(shù)據(jù)長度? -? 寫數(shù)字疙渣,單位字節(jié)(注:回車輸入具體內(nèi)容)
增/改鍵(set)
語法:set 鍵 是否壓縮? 緩存時(shí)間? 數(shù)據(jù)長度
說明: 鍵存在-則修改匙奴,鍵不存在-則創(chuàng)建
獲取鍵值(get)
語法:get 鍵
添加鍵數(shù)據(jù)(add)
語法:add ?鍵 ?是否壓縮 ?緩存時(shí)間/s ?數(shù)據(jù)長度/字節(jié)?
說明:只能添加不能修改
修改鍵數(shù)據(jù)(replace)
語法:replace ?鍵 ?是否壓縮 ?緩存時(shí)間/s ??數(shù)據(jù)長度/字節(jié)
說明:只能修改不能添加
刪除鍵(delete)
語法:delete 鍵
刪除所有鍵(flush_all)
語法:flush_all
遞增(incr)和遞減(decr)
語法:incr? 鍵? 數(shù)字
語法:decr? 鍵? 數(shù)字
說明:返回增長后的結(jié)果,鍵必須存在
查看當(dāng)前Memcached運(yùn)行狀態(tài)(stats)
pid: memcache服務(wù)器進(jìn)程ID
uptime:服務(wù)器已運(yùn)行秒數(shù)
time:服務(wù)器當(dāng)前Unix時(shí)間戳
version:memcache版本
pointer_size:操作系統(tǒng)指針大小
rusage_user:進(jìn)程累計(jì)用戶時(shí)間
rusage_system:進(jìn)程累計(jì)系統(tǒng)時(shí)間
curr_connections:當(dāng)前連接數(shù)量
total_connections:Memcached運(yùn)行以來連接總數(shù)
connection_structures:Memcached分配的連接結(jié)構(gòu)數(shù)量
cmd_get:get命令請(qǐng)求次數(shù)
cmd_set:set命令請(qǐng)求次數(shù)
cmd_flush:flush命令請(qǐng)求次數(shù)
get_hits:get命令命中次數(shù)
get_misses:get命令未命中次數(shù)
delete_misses:delete命令未命中次數(shù)
delete_hits:delete命令命中次數(shù)
incr_misses:incr命令未命中次數(shù)
incr_hits:incr命令命中次數(shù)
decr_misses:decr命令未命中次數(shù)
decr_hits:decr命令命中次數(shù)
cas_misses:cas命令未命中次數(shù)
cas_hits:cas命令命中次數(shù)
cas_badval:使用擦拭次數(shù)
auth_cmds:認(rèn)證命令處理的次數(shù)
auth_errors:認(rèn)證失敗數(shù)目
bytes_read:讀取總字節(jié)數(shù)
bytes_written:發(fā)送總字節(jié)數(shù)
limit_maxbytes:分配的內(nèi)存總大型蟆(字節(jié))
accepting_conns:服務(wù)器是否達(dá)到過最大連接(0/1)
listen_disabled_num:失效的監(jiān)聽數(shù)
threads:當(dāng)前線程數(shù)
conn_yields:連接操作主動(dòng)放棄數(shù)目
bytes:當(dāng)前存儲(chǔ)占用的字節(jié)數(shù)
curr_items:當(dāng)前存儲(chǔ)的數(shù)據(jù)總數(shù)
total_items:啟動(dòng)以來存儲(chǔ)的數(shù)據(jù)總數(shù)(包括過期的)
evictions:LRU釋放的對(duì)象數(shù)目
reclaimed:已過期的數(shù)據(jù)條目來存儲(chǔ)新數(shù)據(jù)的數(shù)目
PHP操作memcache
先開啟memcache擴(kuò)展即可
語法:
創(chuàng)建mem對(duì)象:$mem = new Memcache;
連接服務(wù)器:? $mem->connect(服務(wù)ip地址泼菌,端口)
關(guān)閉服務(wù)器:? $mem->close();
設(shè)置數(shù)據(jù):? ? $mem->set(鍵,值? [啦租,是否壓縮哗伯,緩存時(shí)間])
獲取數(shù)據(jù):? ? $mem->get(鍵)
遞增:? ? ? ? $mem->incrment(鍵,數(shù)字);遞減: ? $mem->decrment(鍵刷钢,數(shù)字);
Memcache的相關(guān)算法
惰性過期機(jī)制
說明:memcached內(nèi)部不會(huì)監(jiān)視記錄是否過期笋颤,而是在get時(shí)查看記錄的時(shí)間戳,檢查記錄是否過期内地。這種技術(shù)被稱為惰性過期
好處:減少監(jiān)控過期產(chǎn)生的開銷
最近最少使用算法
緩存空間已滿伴澄,采用LRU策略,將使用頻率最低數(shù)據(jù)進(jìn)行刪除
Redis
字符串(string)
設(shè)置1個(gè)鍵: set 鍵? 值
設(shè)置n個(gè)鍵:mset 鍵1 值1 .. 鍵n 值n
獲取1個(gè)鍵: get 鍵?
獲取n個(gè)鍵:mget 鍵1 鍵n
遞增遞減: incr/decr 鍵
增減指定: incrby/decrby 鍵 數(shù)字
追加:? ? append 鍵 內(nèi)容
截融寤骸: ? substr 鍵 起始位置 結(jié)束位置(注:下標(biāo)從0開始非凌,含前含后)
哈希(Hash)
設(shè)置1個(gè)值: hset 鍵 字段? 值
獲取1個(gè)值: hget 鍵 字段?
設(shè)置n個(gè)值:hmset 鍵 字段1 值1 ... 字段n 值n
獲取n個(gè)值:hmget 鍵 字段1 ... 字段n
檢測(cè)字段: hexists 鍵 字段
刪除字段: hdel? 鍵 字段
字段個(gè)數(shù): hlen? 鍵
所有字段: hkeys 鍵
所有值:? hvals 鍵
所有字段值:hgetall 鍵
列表(List)
壓入:lpush/rpush 鍵 值
彈出:lpop/rpop? 鍵
查詢:lrange 鍵 起始位置 結(jié)束位置
集合(Set)
添加:sadd 集合名 數(shù)據(jù)
刪除:srem 集合名 數(shù)據(jù)
查看:smembers 集合名
差集:sdiff 集合名1 ... 集合名n? ? 我有你沒有
交集:sinter 集合名1 ... 集合名n? 大家都有的
并集:sunion 集合名1 ... 集合名n? 合并去重
有序集合(Sorted Set)
添加:zadd 集合名 數(shù)據(jù) 成員
刪除:zrem 集合名 成員
查看: zrange 集合名 起始位置 結(jié)束位置 [withscores]? ? (升序)
查看: zrevrange 集合名 起始位置 結(jié)束位置 [withscores]? (降序)
鍵(Key)
鍵是否存在:exists 鍵
鍵類型: type 鍵
鍵查詢: keys *
鍵更名: rename 舊鍵 新鍵
鍵統(tǒng)計(jì): dbsize
鍵設(shè)置過期:expire 鍵? 秒數(shù)
查看過期: ttl 鍵 (明確:過期則代表不存在,不存在-2荆针,未設(shè)置-1)
選擇數(shù)據(jù)庫:select 下標(biāo)(注:通過redis.conf聲明數(shù)據(jù)庫個(gè)數(shù))
刪除當(dāng)前庫:flushdb
刪除所有庫:flushall
Mysql優(yōu)化
如何優(yōu)化MySQL
架構(gòu):主從復(fù)制敞嗡、讀寫分離
設(shè)計(jì):三范式+逆范式、存儲(chǔ)引擎航背、列類型的選擇
功能:索引喉悴、緩存、分區(qū)
三范式(設(shè)計(jì)表的規(guī)則)設(shè)計(jì)表:
確保每列/字段保持原子性
有主鍵玖媚,且非主鍵字段依賴主鍵
消除傳遞依賴箕肃,非主鍵字段不能相互依賴
好處:減少冗余,提高表的查詢速度
逆范式:用空間換時(shí)間
設(shè)計(jì)表推薦如下字段
編號(hào)今魔、創(chuàng)建于勺像、更新于、是否刪除
存儲(chǔ)引擎
名詞错森,指MySQL按照指定數(shù)據(jù)格式存儲(chǔ)
myisam:速度快吟宦,但不支持事務(wù)和外鍵約束
innodb:支持事務(wù),行級(jí)鎖定涩维,外鍵約束
archive:只可插入和查詢殃姓,不支持刪除和修改
memory:存儲(chǔ)在內(nèi)存,了解
MyIsam和InnoDB存儲(chǔ)引擎區(qū)別
存儲(chǔ)結(jié)構(gòu):myisam - 3個(gè)文件、innodb - 2個(gè)文件
鎖:myisam - 僅支持表鎖辰狡,innodb - 行鎖&表鎖
事物和外鍵支持:myisam - 不支持 锋叨, innodb? -支持
CURD操作:
?? ? ? ? myisam:大量查詢
?? ? ? ? innodb:大量的插入和修改
全文檢索:僅MySQL5.6以下innodb不支持(都不支持中文)
慢查詢?nèi)罩?/p>
作用:為了防止sql出問題,查詢過慢宛篇。
方法:通過MySQL記錄執(zhí)行較長的SQL語言
使用如下指令查看慢查詢?nèi)罩臼欠耖_啟
showvariableslike'%slow_query%'
沒開啟娃磺,就手工開啟慢查詢?nèi)罩?/p>
setglobalslow_query_log =1;
設(shè)置查詢的臨界時(shí)間(查詢超過指定時(shí)間后紀(jì)錄)
showvariableslike'%query_time%';
setgloballong_query_time =2;
使用查詢語句(超時(shí))
insertintophp_slow_log2values('zzzzzz','zzzzzz');
insertintophp_slow_log2(name,name2)selectname,name2fromphp_slow_log2;
驗(yàn)證記錄慢SQL語句,查看日志的記錄
索引
四種索引形式:
普通索引(index)? ? ? ? ? ? ? -? 僅僅為了提高查詢速度
唯一索引(unique)? ? ? ? ? -? 保存數(shù)據(jù)唯一性不能重復(fù)
主鍵索引(primary key)? -? 既保存數(shù)據(jù)唯一又不能為null? ? ? ? 編號(hào)
全文檢索(fulltext) ? -? 提取關(guān)鍵字添加索引(明天詳細(xì)說)? like
組合索引(index) ? -? 給多個(gè)字段添加相同的索引
? 新建表時(shí)添加索引:
修改表時(shí)添加索引或者刪除索引
修改表添加索引:alter table 表名 add 索引類型? 索引名(字段)
刪除表指定索引:drop? index? 索引名 on 表名
MySQL中的執(zhí)行計(jì)劃
就是通過explain語法分析SQL語句
語法:explain? SQL語句 \G
說明:\G后面不要加分號(hào)
字段類型含義
select_type查詢類型
table表名
type連接類型
possible_keys可能用到的索引
key實(shí)際用到索引
key_len索引長度
rows檢索了多少數(shù)據(jù)叫倍,最終顯示結(jié)果
分析查詢類型(select_type)
simple:不含子查詢
primary:含子查詢或派生查詢
subquery :非from子查詢
derived:from型子查詢
union
union result
分析表名(table)
實(shí)際表名
表別名
derived(from型子查詢)
null
分析額外項(xiàng)(extra)
index:是指用到了索引覆蓋偷卧,效率非常高
using where:是指光靠索引定位不了,還得where判斷一下
extra中出現(xiàn)以下2項(xiàng)意味著MySQL根本不能使用索引吆倦,效率會(huì)受到重大影響听诸,應(yīng)盡可能對(duì)此進(jìn)行優(yōu)化
using temporary:表示 MySQL 在對(duì)查詢結(jié)果排序時(shí)使用臨時(shí)表。常見于排序 order by 和分組查詢 group by
using filesort:表示 MySQL 會(huì)對(duì)結(jié)果使用一個(gè)外部索引排序,而不是從表里按索引次序讀到相關(guān)內(nèi)容蚕泽∩卫妫可能在內(nèi)存或者磁盤上進(jìn)行排序。MySQL 中無法利用索引完成的排序操作稱為“文件排序”
分析連接所使用的類型(type)
最好的是? system? 一般在表中只有一行記錄的或者查詢系統(tǒng)表的時(shí)候出現(xiàn)须妻。
其次就是 const? ? ? 一般在使用主鍵索引的時(shí)候會(huì)出現(xiàn)仔蝌。
其其次 range? ? ? ? ? 一般在做范圍查詢的時(shí)候會(huì)使用 id < 100。
index? ? ? ? ? ? ? ? ? 代表可以使用索引做一些優(yōu)化荒吏,一般在查詢表的總行數(shù)的時(shí)候出現(xiàn)敛惊。
all? ? ? ? ? ? ? ? ? ? ? 一般使用不上索引的時(shí)候出現(xiàn)。
. ref 意思是指 通過索引列,可以直接引用到某些數(shù)據(jù)行. eq_ref 意思是指 通過索引列,可以直接引用某1行數(shù)據(jù)
索引的使用原則(哪些常見情況不能用索引绰更?)
說明:
like查詢(“%”和“_”開頭)索引失效
or運(yùn)算都要具有索引瞧挤,否則索引失效
where條件字段是字符串類型必須加引號(hào)
組合索引字段單獨(dú)使用,左邊生效儡湾,右邊失效(左原則)
前綴索引
概念:就是給字段內(nèi)容前n個(gè)字符添加索引(前n個(gè)字符必須具備唯一性)
好處:加快查詢速度
語法:
altertable表名add索引類型 索引名(字段(字符))
limit分頁優(yōu)化(百萬至千萬級(jí)快速分頁)
由于數(shù)據(jù)量大超過一定頁后SQL語句查詢慢
問題分析:如果只想查詢最后的5條數(shù)據(jù)特恬,但是一般查詢限制會(huì)查詢所有數(shù)據(jù),所以效率極低
解決方法:
從業(yè)務(wù)角度(百度徐钠、谷歌)鸵鸥,限制頁面展示的數(shù)量
從索引角度
以前是通過SQL語句限制數(shù)據(jù),會(huì)過濾全部數(shù)據(jù)
通過id或者其它條件過濾丹皱,避免不必要的性能影響
分表技術(shù)
水平分表
當(dāng)一個(gè)表很大時(shí)我們創(chuàng)建索引后,查詢速度還是很慢宋税,把一個(gè)大表按照某個(gè)標(biāo)準(zhǔn)分割成小表摊崭,這樣可以提高查詢的速度
(用戶ID)%(表個(gè)數(shù)),再通過取余出來的結(jié)果排序
垂直分表
一個(gè)表有很多字段杰赛,查詢慢呢簸。可以通過區(qū)分常用字段和不常用字段
為什么需要MySQL分表/分區(qū)
水平分表或分區(qū),都是為了加快查詢速度
水平分表需要手動(dòng)在應(yīng)用層寫邏輯代碼根时,但是通過分區(qū)可以避免瘦赫,由MySQL底層實(shí)現(xiàn),我們只需要寫原生SQL語句
分區(qū)算法
分區(qū)算法介紹
求余(主鍵字段):key求余算法蛤迎、hash算法
條件:list-數(shù)據(jù)必須在指定集合中确虱,range-數(shù)據(jù)在執(zhí)行范圍中
分區(qū)語法
createtable表名名(
)engine=存儲(chǔ)引擎charset=編號(hào)
partitionby算法名(字段)partitions數(shù)字;
分區(qū)管理
取余管理:增加分區(qū)-不影響原數(shù)據(jù),刪除分區(qū)-不影響原數(shù)據(jù)
條件管理:增加分區(qū)-不影響原數(shù)據(jù)替裆,刪除分區(qū)-數(shù)據(jù)丟失
取余管理(key,hash)
增加分區(qū)數(shù)量:alter table 表名 add partition partitions 數(shù)字
減小分區(qū)數(shù)量:alter table 表名 coalesce partition 數(shù)字
條件管理(list校辩,range)
刪除分區(qū):alter table 表名 drop partition 分區(qū)名
添加分區(qū):
Sphinx
一個(gè)軟件,用來代替MySQL全文檢索
特性:(強(qiáng)辆童、快)
高速的建立索引(峰值性能能達(dá)10M/s)
高性能的搜索(在2-4G的文本數(shù)據(jù)上宜咒,平均每次檢索時(shí)間小于0.1秒)
可處理海量數(shù)據(jù)
優(yōu)勢(shì)
Sphinx單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為0.x秒(毫秒級(jí))
Sphinx創(chuàng)建索引的速度為:創(chuàng)建100萬條記錄的索引只需3~4分鐘把鉴,創(chuàng)建1000萬條記錄的索引可以在50分鐘內(nèi)完成故黑,而只包含最新10萬條記錄的增量索引,重建一次只需幾十秒
Sphinx使用流程
通過sphinx去MySQL中獲取并建立索引文件
通過php去sphinx中查詢數(shù)據(jù)并返回ID
根據(jù)ID去MySQL中查詢具體數(shù)據(jù)
安裝sphinx
配置Sphinx
創(chuàng)建數(shù)據(jù)庫
將etc/csft_mysql.conf復(fù)制并更名為sphinx.conf
復(fù)制下面代碼替換shpinx.conf中的內(nèi)容(紅色-可能需要修改庭砍,綠色-存在對(duì)應(yīng)關(guān)系)
#數(shù)據(jù)源:數(shù)據(jù)來源定義(數(shù)據(jù)庫信息场晶、數(shù)據(jù)源SQL語句)
source music
{
?? #下面是sql數(shù)據(jù)庫特有的端口,用戶名逗威,密碼峰搪,數(shù)據(jù)庫名等。
?? type ? ? ? ? ? ? ? ? ?? = mysql
?
?? sql_host ? ? ? ? ? ? ?? = localhost
?? sql_user ? ? ? ? ? ? ?? = root
?? sql_pass ? ? ? ? ? ? ?? = admin
?? sql_db ? ? ? ? ? ? ? ?? = youhua3
?? sql_port ? ? ? ? ? ? ?? = 3306
?? sql_query_pre ? ? ? ? ? = SET NAMES utf8
?
?? #sql_query屬性:取出要?jiǎng)?chuàng)建索引的數(shù)據(jù)
?? #要求1:SELECT的第一個(gè)字段必須是主鍵凯旭、
?? #要求2:第一個(gè)字段的名字(別名)必須是id
?? #要求3:其他的字段就是要?jiǎng)?chuàng)建索引的字段
?? #需? 求:為歌曲表中的title和author和content字段創(chuàng)建索引
?? sql_query ? ? ? ? ? ? ? = SELECT id, title, author, content FROM music
}
?
#索引的定義(索引文件存放的位置概耻,索引文件的名字)
#每個(gè)index對(duì)應(yīng)一個(gè)數(shù)據(jù)源,用來定義這個(gè)數(shù)據(jù)源生成的索引文件的信息
index music
{
?? #該索引對(duì)應(yīng)哪個(gè)數(shù)據(jù)源
?? source ? ? ? ? ?? = music
?? #索引文件存放的目錄和名字(存到E:/sphinx/var/data/目錄下罐呼,索引文件的名字是music)
?? path ? ? ? ? ? ?? = E:/sphinx/var/data/music ?
?? docinfo ? ? ? ? ? = extern
?? mlock ? ? ? ? ? ? = 0
?? morphology ? ? ?? = none
?? min_word_len ? ?? = 1
?? html_strip ? ? ?? = 0
?? #詞庫文件所在的目錄
?? charset_dictpath = E:/sphinx/etc/
?
#字符集編碼類型鞠柄,可以為:(sbcs,utf-8,zh_cn.utf-8,zh_ch.gbk,zh_ch.big5)
?? charset_type ? ? ?? = zh_cn.utf-8
}
?
#全局index定義
indexer
{
?? #建立索引的時(shí)候,索引內(nèi)存限制
?? mem_limit ? ? ? ? ?? = 128M
}
?
#searchd服務(wù)定義
searchd
{
?? listen ? ? ? ? ? ?? = ? 9312
?? read_timeout ? ? ?? = 5
?? max_children ? ? ?? = 30
?? max_matches ? ? ? ? = 1000
?? seamless_rotate ? ? = 0
?? preopen_indexes ? ? = 0
?? unlink_old ? ? ? ?? = 1
?? # 進(jìn)程id文件
?? pid_file = E:/sphinx/var/log/searchd_mysql.pid ?
?? # 系統(tǒng)日志存放的位置
?? log = E:/sphinx/var/log/searchd_mysql.log ? ? ? ?
?? # 查詢?nèi)罩敬娣诺奈恢?/p>
?? query_log = E:/sphinx/var/log/query_mysql.log
}
index music? ? 創(chuàng)建music索引(和source一一對(duì)應(yīng)嫉柴,表示該索引通過哪些數(shù)據(jù)創(chuàng)建)
source music1? 創(chuàng)建music數(shù)據(jù)源
創(chuàng)建索引
創(chuàng)建指定索引語法:indexer.exe? -c 配置文件? 索引名
創(chuàng)建全部索引語法:indexer.exe? -c 配置文件? --all
使用PHP API操作Sphinx
創(chuàng)建服務(wù):bin\searchd.exe? -c 配置文件 --install
刪除服務(wù):sc delete 服務(wù)名
啟動(dòng)服務(wù):net start 服務(wù)名
關(guān)閉服務(wù):net stop? 服務(wù)名
匹配模式
$sp->SetMatchMode(常量)
常量規(guī)則
SPH_MATCH_ALL? ? ? ? ? 匹配所有詞(默認(rèn))SPH_MATCH_ANY ? ? ? ? 匹配一個(gè)詞
SPH_MATCH_PHRASE? ? ? 匹配整一個(gè)詞
SPH_MATCH_BOOLEAN? 將查詢看作一個(gè)布爾表達(dá)式
SPH_MATCH_EXTENDED? 查詢看做一個(gè)sphinx的表達(dá)式
將sphinx的結(jié)果轉(zhuǎn)化為具體的信息
通過sphinx去mysql中獲取數(shù)據(jù)并建立索引文件
通過php去sphinx匹配數(shù)據(jù)ID
根據(jù)ID去數(shù)據(jù)庫中查詢數(shù)據(jù)
增量索引(Sphinx索引更新)
概念:更新sphinx索引文件的表現(xiàn)稱之為增量索引
語法:
創(chuàng)建索引語法:indexer? -c? 配置文件? 索引名
合并索引語法:indexer? -c? 配置文件? --merge 主索引名 新索引名 --rotate
MongoDB