Archive for the ‘linux’ Category
Dymanic subdomain
วันนี้นั่งครึ้มๆอีกแล้ว ก็เลยจะปรับ FBMALL ให้มีเว็บเพื่อให้ Google เข้ามาเก็บข้อมูล แล้วมีผู้คนทั่วไปเห็นสินค้ากับ Fb mall มากขึ้น ตามแผนที่วางไว้ เลยต้องทำ fbmall.com ขึ้นมา
แต่ก็มีอุปสรรคจนได้ คือ FBMall.com ไม่ว่าง ติดต่อซื้อบอกว่า $2500 ให้ตายเถอะ (คิดในใจว่า จำไว้เลยนะ มีตังค์กูไปซื้อแน่) ก็เลยจด fbmalls.com มา
สิ่งที่จะทำก็คือ ให้แต่ละคนสามารถตั้ง subdomain เองได้แล้ว ก็จะได้ subdomain นั้นไปใช้งานภายใต้ xxx.fbmalls.com
เราเองก็รู้ว่ามันต้องทำ 2 ส่วนคือ domain เราต้องปรับให้ทุกๆ sub มาที่นี่แหละ แล้วก็ปรับ apache ให้รับว่าไปรันที่ใหน แต่.. มันทำยังไงหว่า นั่ง งมไปงมมากับ apache config ตั้งนาน เลยคิดคำนึงได้คือ ”Dymanic subdomain apache” เอาไป search โอ้ว เจอด้วย
เจอจาก forums นึงคุยกันเรื่อง dynamic subdomain บน apache พอดีเลย จัดไป(สูบอีกแล้ว)
โดยหลักการก็ตามที่คิดไว้
> 1) add a wildcard A record to BIND (*.domain.tld)
Yes.> 2) add a wildcard virtual domain (*.domain.tld) to my http.config file
Yes. Point it to your main root (main domain “home page”) directory.
เราก็ อ่อ….. มัน wildcard ได้ เราก็จัดซะ ไป add A record ใน control panel เลยว่า * ให้ไปที่ IP ของเรา
จากนั้นก็ไปทำ VirtualHost เพิ่มขึ้นมา ว่าให้ไปรันที่ใหน แค่นี้จบ 555 ง่ายดีจริงๆ ต่อไปก็เอา script แยกเอา
<VirtualHost 122.155.17.152:80>ServerName www.fbmalls.comServerAlias *.fbmalls.comServerAdmin webmaster@fbmalls.comDocumentRoot [Path to program]……
ผมเองไม่ต้องการ แยก file หรือ code ให้เป็น folder อะไร ก็ไม่ต้องทำอะไรต่อ เอาไปรันแสดงผลอย่างเดียว เด่วเจอกัน
Invalid command ‘\xef\xbb\xbfOptions’, perhaps misspelled or defined by a module not included in the server configuration
ย้ายงานมาเครื่ใหม่เพราะ vista นั้นได้ expire ไปเสียแล้ว 555 ก็เลยลง ubuntu ซะ เล่นซะวุ้บๆ ว๊าบๆ เลย แตงอยู่พักนึงเหมือนไม่งั้นมันก็รกตา ตามงั้น
วันนี้เจอปัญหาใหม่นั่งงงพักนึงเลยคือ
Invalid command ‘\xef\xbb\xbfOptions’, perhaps misspelled or defined by a module not included in the server configuration
งงกับตัวเอง ควานหาอยู่มันเป็นอะไรแล้วเป็นกับ .htaccess ซึ่งก็ไม่น่าจะมีอะไรเพราะ mod rewrite ก็เปิดใช้งานแล้ว นั่งงงอยู่พัก จนมารู้ว่า อ้าาาาาา Encode เองสาดดด
แค่เขียน file ใหม่เนื้อหาเดิมก็หายและ ลองเอาไปใช้กันดูถ้าเจอนะ
ซ่อม database mysql
เมื่อวานถึงกับมึน ว่าอยู่ๆ มันก็พังไปซะงั้น ทั้งๆ ทั้ก็ไม่ได้ทำอะไรนี่นา T_T
เริ่งเกิดที่ http://www.thaihosttalk.com/index.php?topic=20692.0 นี่ครับ
นั่งทำนานแสนนานกับ mysql ตกลงแล้ว database พัง แล้วไปพังที่ใหนรู้ใหมครับ mysql.user ให้ตายซิ run mysql ก็ไ่ม่ได้
พี่ไก่ thaitumweb เลยให้ซ่อมซะคือ
myisamchk -r user.MYI
ได้ครับ โหคราวนี้ ซ่อมหมดเลยดังนี้
myisamchk -r /var/lib/mysql/*/*.MYI
ไปหลาย database เลย อะไรมันจะซวยปานนี้ ใครที่ทำกันกันตรวจกันบ่อยๆนะ
เข้าใจ sphinx full text search engine
จากที่เคยเกริ่นเรื่องเกี่ยวกับ sphinx full text search ไปแล้วทีนึง คราวนี้เรามาดูวิธีและหลักการทำงานของ full text search กัน
full text search engine นั้นจะทำงานในลักษณะของการทำ data ที่มาจากที่เรา config ไว้ มาทำเป็น index เฉพาะแบบของ fulltext search นั้นๆ ซึ่งแต่ละตัวก็จะไม่เหมือนกัน บางที่อาจจะไม่ได้ใช้แนวคิดนี้ แต่เห็นหลายๆ ที่จะเป็นแบบนี้ เพื่อให้สามารถ ค้นหาข้อมูลในรูปแบบของตัวเองได้
sphinx ก็เช่นเดียวกัน เราจะต้อง config ว่าให้ seletct ส่วนใด มาทำเป็น เนื้อความสำหรับ search ได้บ้าง หลังจากนั้นเราก็ตั้งใช้คำสั่งสร้าง index ขึ้นมา sphinx ก็จะสร้าง index ของตนเองขึ้นมา ให้สามารถทำการ search ได้ง่ายตามรูปแบบที่ตั่งไว้
การใช้งาน search นั่นเวลาจะใช้งานจึงต้องเขียนออกมาเป็นอีกส่วน ในส่วนใหญ่แล้วโปรแกรมพวกนี้ก็จะเปิด port อีก port ไว้เลยเป็นของตนเองอย่าง sphinx เองก็เปิด port ไว้เหมือนกัน ซึ่งตอนที่รัน เราก็สามารถ config ลงไปได้ด้วยว่าอยากจะเปิด port อะไีร เวลาสร้าง connection ก็ต่อมาที่ port นั้นๆที่ตั้งไว้
Sphinx เองเปิด port 3312 เป็น default ดูได้จาก sphinx.conf
# IP address to bind on
# optional, default is 0.0.0.0 (ie. listen on all interfaces)
#
# address = 127.0.0.1
# address = 192.168.0.1# searchd TCP port number
# mandatory, default is 3312
port = 3312
full text search engine ส่วนใหญ่จะมี library สำหรับติดต่อกับตัวเองพร้อมทั้ง reference มาให้อยู่แล้วเพื่อความสะดวกในการใช้งาน sphix ก็มีเช่นกัน คือ folder api ที่มาพร้อมๆ กับตัวที่ download มาติดตั้งแหละ มีทั้ง ภาษา PHP, ptyhon, ruby และ java เลยทีเดียว
รวมทั้งยังมี reference การใช้งานอีกด้วยที่ http://www.sphinxsearch.com/docs/current.html#api-reference
จากการที่เราทำ index ครั้งนึงเราก็จะ search ได้เพียงสิ่งที่เรานั่นสร้าง index ไป ดังนั้นเราก็ต้องทำ index เรื่อยๆ เช่นการทำ cronjob ของ indexer เป็นต้น
แต่การทำ cron ก็จะได้ ข้อมูลในการ search ไม่เป็นปัจจุบันเสมอ แต่จะ search ไปตามช่วงเวลาแทน sphinx เองก็มี mode ในการทำทั้ง merge index หรือการสร้าง index เสมอทุกๆ การใช้งาน ก็เอาไว้ต่อกันทีหลังแล้วกันนะ
sphinx full text search engine
วันนี้ทำงานสบายๆ ก็เลยมาเขียนซะหน่อย ห่างหายไปจาก blog นานๆ แล้ว ที่จะพูดถึงวันนี้ก็คือ fulltext search
ช่างเป็นอะไรที่ กิน performance เครื่องสุดๆ ลองคิดถึง algorithm ง่ายของ LIKE ใน SQL นะ
1 record ก็จะมีั text เช่น ‘some text’
แล้วเราก็หาคำว่า ‘me’ ใน text นี้ มันก็ต้องหา so, om, me แล้วก็เจอ ลองคิดดูว่ามันจะหาไปกี่ที
แน่นอนว่า วิธีนี้มันโง่และทึ่มมาก เพราะทำงานธรรมดาสุดๆ คือ เทียบกันไปเรื่อยๆ การทำงานจึงเป็น loop ไป เรื่อยๆ แต่ปัจจุบันนั้นก็มีคนศึกษาเรื่องนี้และได้คิด algorithm ออกมาเพื่อที่จะจัดการกับ full text search อีกมาก บาง algorithm ก็ได้รับความนิยม จนไปสู่การนำมาใช้งานจริง
.
sphinx ก็เป็นอีก 1 ตัวที่ได้รับความนิยมอยู่ในขณะนี้ เพราะด้วย performance และการใช้งานนั้นง่าย รวมทั้งยังเป็น Open Source อีกด้วย ทำให้เปิดโลกกว้างการการเพิ่มเติมและการนำไปใช้ด้วย
sphinx search นั้นมี feature หลักคือ
- high indexing speed (upto 10 MB/sec on modern CPUs)
- high search speed (avg query is under 0.1 sec on 2-4 GB text collections)
- high scalability (upto 100 GB of text, upto 100 M documents on a single CPU)
- supports distributed searching (since v.0.9.6)
- supports MySQL natively (MyISAM and InnoDB tables are both supported)
- supports phrase searching
- supports phrase proximity ranking, providing good relevance
- supports English and Russian stemming
- supports any number of document fields (weights can be changed on the fly)
- supports document groups
- supports stopwords
- supports different search modes (“match all”, “match phrase” and “match any” as of v.0.9.5)
- generic XML interface which greatly simplifies custom integration
- pure-PHP (ie. NO module compiling etc) search client API
ซึ่งถ้าอ่านดีๆ แล้วก็จะเห็น performance นั้นสูงทีเดียวและสามารถใช้งานได้ง่ายด้วย API และยัง support กับ Mysql และ postgresql ซึ่งเป็นฐานข้อมูล แบบ open source ที่ได้รับความนิยมทั่วโลก
จากที่ได้ลองติดตั้งดู ไม่มีอะไรยากเกินไปกว่า แตก tarball -> ./configure -> make -> make install แล้วก็ config อีกนิดหน่อย แค่ ใส่ user pass และ db name ของ database server ลงไปก็เสร็จแล้ว
ข้างใน config ก็มีให้เลือก database server อยู่แล้ว สามารถเลือกรูปแบบให้เหมาะสมได้เลย
ใน tutorial นั้นก็ได้มีการเขียนติดต่อกับ PHP ได้เลย เพียงนำ lib include ไปเท่านั้น
สามารถ compile ร่วมไปกับ mysql ให้เป็น engine ของ mysql ได้
วันนี้มาเกริ่นๆ เท่านั้น เกี่ยวกับ sphinx search ต่อไปก็จะมาพูดถึงการเขียนกัน แล้วก็รายละเอียด ลึกๆ แล้วกัน
