無(wú)標(biāo)題文章

目錄

筆記大型項(xiàng)目?jī)?yōu)化概述大型項(xiàng)目?jī)?yōu)化的方向代碼優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化緩存優(yōu)化架構(gòu)優(yōu)化Memcache與MySQL比較語(yǔ)法參數(shù)解釋?zhuān)?/a>增/改鍵(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ì)劃分析查詢類(lèi)型(select_type)分析表名(table)分析額外項(xiàng)(extra)分析連接所使用的類(lèi)型(type)索引的使用原則(哪些常見(jiàn)情況不能用索引?)前綴索引limit分頁(yè)優(yōu)化(百萬(wàn)至千萬(wàn)級(jí)快速分頁(yè))分表技術(shù)為什么需要MySQL分表/分區(qū)分區(qū)算法分區(qū)算法介紹分區(qū)語(yǔ)法分區(qū)管理SphinxSphinx使用流程安裝sphinx配置Sphinx創(chuàng)建索引使用PHP API操作Sphinx匹配模式增量索引(Sphinx索引更新)MongoDB概念什么是NoSQL創(chuàng)建MongoDB服務(wù)連接MongoDB服務(wù)器入門(mén)命令庫(kù)和集合操作增刪改查

筆記

大型項(xiàng)目?jī)?yōu)化概述

簡(jiǎn)單理解:讀取源碼-》詞法分析-》創(chuàng)建opcode-》執(zhí)行opcode重復(fù)創(chuàng)建會(huì)增加額外的內(nèi)存和cpu開(kāi)銷(xiāo)

解決方案:安裝ZendOptimizer或APC2.0等可以加速PHP代碼訪問(wèn),主要用于緩存opcode而不是每次重復(fù)編譯減少CPU和內(nèi)存開(kāi)銷(xiāo)(php5.5+后不需要安裝第三方軟件,直接開(kāi)啟PHP配置文件中Opcache即可。

大型項(xiàng)目?jī)?yōu)化的方向

代碼優(yōu)化

開(kāi)啟opcode緩存,減少額外CPU和內(nèi)存開(kāi)銷(xiāo),加快代碼運(yùn)行速度

重模型,輕控制器,減少冗余

符合PHP-FIG規(guī)范和phpDoc規(guī)范,增強(qiáng)代碼可讀性&可擴(kuò)展性,有利于團(tuán)隊(duì)開(kāi)發(fā)

類(lèi): 花括號(hào)獨(dú)占一行

類(lèi)中方法:華括號(hào)獨(dú)占一行

類(lèi)名:大駝峰

方法名:小駝峰

命名空間:后面空一行

常量名:大寫(xiě),多個(gè)單詞用下劃線分割

數(shù)據(jù)庫(kù)優(yōu)化

架構(gòu):主從復(fù)制、讀寫(xiě)分離

設(shè)計(jì):存儲(chǔ)引擎、字段類(lèi)型、三范式

功能:緩存、分區(qū)、索引

緩存優(yōu)化

好處:減少數(shù)據(jù)庫(kù)查詢,將數(shù)據(jù)緩存到文件或內(nèi)存中,加快查詢數(shù)據(jù)

實(shí)現(xiàn):

內(nèi)存(memcache、redis)

文件(使用TP3.2的大S或大F方法,TP5中的Cache類(lèi))

內(nèi)存速度>文件速度>數(shù)據(jù)庫(kù)速度

架構(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ù)器有寫(xiě)入數(shù)據(jù)則自動(dòng)同步

讀寫(xiě)分離:通過(guò)PHP判斷,如果是insert/update/delete交給主服務(wù)器處理,如果是select交給從服務(wù)器處理

CDN加速:將靜態(tài)資源緩存到用戶所在城市,加快訪問(wèn)速度

Memcache

概念:一個(gè)數(shù)據(jù)庫(kù),但是數(shù)據(jù)存在內(nèi)存中

作用:常用來(lái)做緩存服務(wù)器、將從數(shù)據(jù)庫(kù)查詢的數(shù)據(jù)緩存起來(lái),減少數(shù)據(jù)庫(kù)查詢、加快查詢速度

數(shù)據(jù)存儲(chǔ)在內(nèi)存中系統(tǒng)重啟則丟失

與MySQL比較

共同點(diǎn):都是C/S架構(gòu)

不同點(diǎn):MySQL存磁盤(pán)文件、memcache存在內(nèi)存中

不同點(diǎn):MySQL存儲(chǔ)數(shù)據(jù)要先創(chuàng)建數(shù)據(jù)庫(kù)再創(chuàng)建表、memcache直接以鍵值對(duì)形式存儲(chǔ)

鍵key值value

字符串(唯一)字符串、整數(shù)、浮點(diǎn)數(shù)、布爾、數(shù)組、對(duì)象、NULL、二進(jìn)制數(shù)據(jù)(圖片、視頻、音頻)

語(yǔ)法參數(shù)解釋?zhuān)?/p>

鍵? ? ? - 最大長(zhǎng)度不超過(guò)250字符

是否壓縮? -? 1-是,0-否(以空間換時(shí)間)

緩存時(shí)間? -? 0-理論永久,其他-單位秒(注:最大存儲(chǔ)時(shí)間30天)

數(shù)據(jù)長(zhǎng)度? -? 寫(xiě)數(shù)字,單位字節(jié)(注:回車(chē)輸入具體內(nèi)容)

增/改鍵(set)

語(yǔ)法:set 鍵 是否壓縮? 緩存時(shí)間? 數(shù)據(jù)長(zhǎng)度

說(shuō)明: 鍵存在-則修改,鍵不存在-則創(chuàng)建

獲取鍵值(get)

語(yǔ)法:get 鍵

添加鍵數(shù)據(jù)(add)

語(yǔ)法:add ?鍵 ?是否壓縮 ?緩存時(shí)間/s ?數(shù)據(jù)長(zhǎng)度/字節(jié)?

說(shuō)明:只能添加不能修改

修改鍵數(shù)據(jù)(replace)

語(yǔ)法:replace ?鍵 ?是否壓縮 ?緩存時(shí)間/s ??數(shù)據(jù)長(zhǎng)度/字節(jié)

說(shuō)明:只能修改不能添加

刪除鍵(delete)

語(yǔ)法:delete 鍵

刪除所有鍵(flush_all)

語(yǔ)法:flush_all

遞增(incr)和遞減(decr)

語(yǔ)法:incr? 鍵? 數(shù)字

語(yǔ)法:decr? 鍵? 數(shù)字

說(shuō)明:返回增長(zhǎng)后的結(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)行以來(lái)連接總數(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á)到過(guò)最大連接(0/1)

listen_disabled_num:失效的監(jiān)聽(tīng)數(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:?jiǎn)?dòng)以來(lái)存儲(chǔ)的數(shù)據(jù)總數(shù)(包括過(guò)期的)

evictions:LRU釋放的對(duì)象數(shù)目

reclaimed:已過(guò)期的數(shù)據(jù)條目來(lái)存儲(chǔ)新數(shù)據(jù)的數(shù)目

PHP操作memcache

先開(kāi)啟memcache擴(kuò)展即可

語(yǔ)法:

創(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)算法

惰性過(guò)期機(jī)制

說(shuō)明:memcached內(nèi)部不會(huì)監(jiān)視記錄是否過(guò)期,而是在get時(shí)查看記錄的時(shí)間戳,檢查記錄是否過(guò)期。這種技術(shù)被稱(chēng)為惰性過(guò)期

好處:減少監(jiān)控過(guò)期產(chǎn)生的開(kāi)銷(xiāo)

最近最少使用算法

緩存空間已滿,采用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開(kāi)始,含前含后)

哈希(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? ? 我有你沒(méi)有

交集:sinter 集合名1 ... 集合名n? 大家都有的

并集:sunion 集合名1 ... 集合名n? 合并去重

有序集合(Sorted Set)

添加:zadd 集合名 數(shù)據(jù) 成員

刪除:zrem 集合名 成員

查看: zrange 集合名 起始位置 結(jié)束位置 [withscores]? ? (升序)

查看: zrevrange 集合名 起始位置 結(jié)束位置 [withscores]? (降序)

鍵(Key)

鍵是否存在:exists 鍵

鍵類(lèi)型: type 鍵

鍵查詢: keys *

鍵更名: rename 舊鍵 新鍵

鍵統(tǒng)計(jì): dbsize

鍵設(shè)置過(guò)期:expire 鍵? 秒數(shù)

查看過(guò)期: ttl 鍵 (明確:過(guò)期則代表不存在,不存在-2,未設(shè)置-1)

選擇數(shù)據(jù)庫(kù):select 下標(biāo)(注:通過(guò)redis.conf聲明數(shù)據(jù)庫(kù)個(gè)數(shù))

刪除當(dāng)前庫(kù):flushdb

刪除所有庫(kù):flushall

Mysql優(yōu)化

如何優(yōu)化MySQL

架構(gòu):主從復(fù)制、讀寫(xiě)分離

設(shè)計(jì):三范式+逆范式、存儲(chǔ)引擎、列類(lèi)型的選擇

功能:索引、緩存、分區(qū)

三范式(設(shè)計(jì)表的規(guī)則)設(shè)計(jì)表:

確保每列/字段保持原子性

有主鍵,且非主鍵字段依賴(lài)主鍵

消除傳遞依賴(lài),非主鍵字段不能相互依賴(lài)

好處:減少冗余,提高表的查詢速度

逆范式:用空間換時(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出問(wèn)題,查詢過(guò)慢。

方法:通過(guò)MySQL記錄執(zhí)行較長(zhǎng)的SQL語(yǔ)言

使用如下指令查看慢查詢?nèi)罩臼欠耖_(kāi)啟

showvariableslike'%slow_query%'

沒(méi)開(kāi)啟,就手工開(kāi)啟慢查詢?nèi)罩?/p>

setglobalslow_query_log =1;

設(shè)置查詢的臨界時(shí)間(查詢超過(guò)指定時(shí)間后紀(jì)錄)

showvariableslike'%query_time%';

setgloballong_query_time =2;

使用查詢語(yǔ)句(超時(shí))

insertintophp_slow_log2values('zzzzzz','zzzzzz');

insertintophp_slow_log2(name,name2)selectname,name2fromphp_slow_log2;

驗(yàn)證記錄慢SQL語(yǔ)句,查看日志的記錄

索引

四種索引形式:

普通索引(index)? ? ? ? ? ? ? -? 僅僅為了提高查詢速度

唯一索引(unique)? ? ? ? ? -? 保存數(shù)據(jù)唯一性不能重復(fù)

主鍵索引(primary key)? -? 既保存數(shù)據(jù)唯一又不能為null? ? ? ? 編號(hào)

全文檢索(fulltext) ? -? 提取關(guān)鍵字添加索引(明天詳細(xì)說(shuō))? like

組合索引(index) ? -? 給多個(gè)字段添加相同的索引

? 新建表時(shí)添加索引:

修改表時(shí)添加索引或者刪除索引

修改表添加索引:alter table 表名 add 索引類(lèi)型? 索引名(字段)

刪除表指定索引:drop? index? 索引名 on 表名

MySQL中的執(zhí)行計(jì)劃

就是通過(guò)explain語(yǔ)法分析SQL語(yǔ)句

語(yǔ)法:explain? SQL語(yǔ)句 \G

說(shuō)明:\G后面不要加分號(hào)

字段類(lèi)型含義

select_type查詢類(lèi)型

table表名

type連接類(lèi)型

possible_keys可能用到的索引

key實(shí)際用到索引

key_len索引長(zhǎng)度

rows檢索了多少數(shù)據(jù),最終顯示結(jié)果

分析查詢類(lèi)型(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í)表。常見(jiàn)于排序 order by 和分組查詢 group by

using filesort:表示 MySQL 會(huì)對(duì)結(jié)果使用一個(gè)外部索引排序,而不是從表里按索引次序讀到相關(guān)內(nèi)容。可能在內(nèi)存或者磁盤(pán)上進(jìn)行排序。MySQL 中無(wú)法利用索引完成的排序操作稱(chēng)為“文件排序”

分析連接所使用的類(lèi)型(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 意思是指 通過(guò)索引列,可以直接引用到某些數(shù)據(jù)行. eq_ref 意思是指 通過(guò)索引列,可以直接引用某1行數(shù)據(jù)

索引的使用原則(哪些常見(jiàn)情況不能用索引?)

說(shuō)明:

like查詢(“%”和“_”開(kāi)頭)索引失效

or運(yùn)算都要具有索引,否則索引失效

where條件字段是字符串類(lèi)型必須加引號(hào)

組合索引字段單獨(dú)使用,左邊生效,右邊失效(左原則)

前綴索引

概念:就是給字段內(nèi)容前n個(gè)字符添加索引(前n個(gè)字符必須具備唯一性)

好處:加快查詢速度

語(yǔ)法:

altertable表名add索引類(lèi)型 索引名(字段(字符))

limit分頁(yè)優(yōu)化(百萬(wàn)至千萬(wàn)級(jí)快速分頁(yè))

由于數(shù)據(jù)量大超過(guò)一定頁(yè)后SQL語(yǔ)句查詢慢

問(wèn)題分析:如果只想查詢最后的5條數(shù)據(jù),但是一般查詢限制會(huì)查詢所有數(shù)據(jù),所以效率極低

解決方法

從業(yè)務(wù)角度(百度、谷歌),限制頁(yè)面展示的數(shù)量

從索引角度

以前是通過(guò)SQL語(yǔ)句限制數(shù)據(jù),會(huì)過(guò)濾全部數(shù)據(jù)

通過(guò)id或者其它條件過(guò)濾,避免不必要的性能影響

分表技術(shù)

水平分表

當(dāng)一個(gè)表很大時(shí)我們創(chuàng)建索引后,查詢速度還是很慢,把一個(gè)大表按照某個(gè)標(biāo)準(zhǔn)分割成小表,這樣可以提高查詢的速度

(用戶ID)%(表個(gè)數(shù)),再通過(guò)取余出來(lái)的結(jié)果排序

垂直分表

一個(gè)表有很多字段,查詢慢。可以通過(guò)區(qū)分常用字段和不常用字段

為什么需要MySQL分表/分區(qū)

水平分表或分區(qū),都是為了加快查詢速度

水平分表需要手動(dòng)在應(yīng)用層寫(xiě)邏輯代碼,但是通過(guò)分區(qū)可以避免,由MySQL底層實(shí)現(xiàn),我們只需要寫(xiě)原生SQL語(yǔ)句

分區(qū)算法

分區(qū)算法介紹

求余(主鍵字段):key求余算法、hash算法

條件:list-數(shù)據(jù)必須在指定集合中,range-數(shù)據(jù)在執(zhí)行范圍中

分區(qū)語(yǔ)法

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è)軟件,用來(lái)代替MySQL全文檢索

特性:(強(qiáng)、快)

高速的建立索引(峰值性能能達(dá)10M/s)

高性能的搜索(在2-4G的文本數(shù)據(jù)上,平均每次檢索時(shí)間小于0.1秒)

可處理海量數(shù)據(jù)

優(yōu)勢(shì)

Sphinx單一索引最大可包含1億條記錄,在1千萬(wàn)條記錄情況下的查詢速度為0.x秒(毫秒級(jí))

Sphinx創(chuàng)建索引的速度為:創(chuàng)建100萬(wàn)條記錄的索引只需3~4分鐘,創(chuàng)建1000萬(wàn)條記錄的索引可以在50分鐘內(nèi)完成,而只包含最新10萬(wàn)條記錄的增量索引,重建一次只需幾十秒

Sphinx使用流程

通過(guò)sphinx去MySQL中獲取并建立索引文件

通過(guò)php去sphinx中查詢數(shù)據(jù)并返回ID

根據(jù)ID去MySQL中查詢具體數(shù)據(jù)

安裝sphinx

配置Sphinx

創(chuàng)建數(shù)據(jù)庫(kù)

將etc/csft_mysql.conf復(fù)制并更名為sphinx.conf

復(fù)制下面代碼替換shpinx.conf中的內(nèi)容(紅色-可能需要修改,綠色-存在對(duì)應(yīng)關(guān)系)

#數(shù)據(jù)源:數(shù)據(jù)來(lái)源定義(數(shù)據(jù)庫(kù)信息、數(shù)據(jù)源SQL語(yǔ)句)

source music

{

?? #下面是sql數(shù)據(jù)庫(kù)特有的端口,用戶名,密碼,數(shù)據(jù)庫(kù)名等。

?? 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ù)源,用來(lái)定義這個(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


?? #詞庫(kù)文件所在的目錄

?? charset_dictpath = E:/sphinx/etc/

?

#字符集編碼類(lèi)型,可以為:(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),表示該索引通過(guò)哪些數(shù)據(jù)創(chuàng)建)

source music1? 創(chuàng)建music數(shù)據(jù)源

創(chuàng)建索引

創(chuàng)建指定索引語(yǔ)法:indexer.exe? -c 配置文件? 索引名

創(chuàng)建全部索引語(yǔ)法: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)化為具體的信息

通過(guò)sphinx去mysql中獲取數(shù)據(jù)并建立索引文件

通過(guò)php去sphinx匹配數(shù)據(jù)ID

根據(jù)ID去數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)

增量索引(Sphinx索引更新)

概念:更新sphinx索引文件的表現(xiàn)稱(chēng)之為增量索引

語(yǔ)法:

創(chuàng)建索引語(yǔ)法:indexer? -c? 配置文件? 索引名

合并索引語(yǔ)法:indexer? -c? 配置文件? --merge 主索引名 新索引名 --rotate

MongoDB

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容