Thursday, December 5, 2013

Вэб сайт хийгээд л байдаг, авч явах гэдэг асуудал гараад ирэхээр хийхээсээ хамаагүй хэцүү юм. Сайтын баазын бичлэгийн тоо ихсээд хандалт ихсээд ирэхээр хурдан уншуулах арга мэх хайгаад систем админ болох дөхөж байна. Энэ талаар тэнэж яваад уншсан 1 зүйлээ хуваалцая. Мэддэггүй нэгэнд нь хэрэг болох байх.

Энэ нь PHP-н Cache технологи болох APC. Энэ талаар их сонсож байсан боловч яг нарийн уншиж судлаж үзээгүй юм байна. Codeigniter фрэймворк лав энэтэй харьцах бэлэн сан байдаг болхоор юу хийдгийг нь ч мэдэхгүй шууд ашиглачихдаг байсан. Симфони судалж байхад анх суулгахад APC cache engine суулга гэдэг юм байна лээ. Тэгэхээр энэ яг юу хийдэг engine вэ гэдгийг үзье.

Программистын бичсэн PHP код сервэрт дараах дарааллаар ажилладаг юм байна.

  1. PHP Кодыг файлаас уншиж санах ойд авна
  2. Lexing: PHP кодыг тэмдэгтүүд рүү хөрвүүлнэ.
  3. Parsing: PHP хэлний алдааг шалгаж, гол илэрхийллүүдийг гаргаж авна
  4. Compiling: Гаргаж авсан илэрхийллүүдийг хөрвүүлж Opcode гэдэг зүйлийг үүсгэнэ ( Энэ нь жава-гаар бол ByteCode юм байна )
  5. Opcode-уудыг ажлуулж эцсийн үр дүнг хэвлэнэ.
1 PHP кодыг ажлуулахад эдгээр бүх үе шатыг дамждаг байх нь. APC - гийн гол зорилго нь 1-4-р алхамыг алгасах явдал юм. 1-нт үүссэн Opcode-г сануулаад дараа дуудах үед шууд ашиглах. Ингэснээр хурд хир сайжрах нь тодорхой юм.

Жава хэлэнд Java файлыг Compile-даж .class файл буюу Byteode бүхий файлыг үүсгэдэг. Яг энэ зарчим нь PHP дээр APC Engine-г ашигласнаар үүсэх юм. 

Сервэр дээрээ APC идэвхжүүлээгүй хүн байвал суулгаад идэвхжүүлээрэй. Нилээн үр дүнтэй арга юм байна лээ шүү.

Хэрхэн суулгаж тохируулах талаар доорх линкээр орж үзнэ үү. Уншаад ойлгосон зүйлээ чадан ядан сийрүүлэн бичлээ :)



Friday, October 12, 2012

  Хэд хоног залхуурч суусных Блог дээрээ 1 бичлэг оруулчихъя. Шальтай их юм бичихгүй ч хэрэгтэй нэгэндээ, дараа нь надад хэрэгтэй байх гэж бодлоо.

  Сая Локал дээрээ 2 хүснэгтээ JOIN - лоод удаад байхаар нь QUERY дуудагдаж байгаа хугацааг нь харлаа.

  Эхний хүснэгт 3500, 2 дахь нь 700 өгөгдөлтэй. Эхний хүснэгтийг 2 дахь хүснэгтээр LEFT JOIN хийж байгаа. Дангаар нь дуудахад Query Time: 0.00010 sec мөртлөө JOIN хийхэд 14 sec болтлоо өсөж байна. JOIN муу гэдгийг нь мэддэг ч ийм зүйл дээр арай ингэж өснө гэж бодсонгүй. Сервэр дээр бол хүчин чадал сайтай гайгүй байх л даа. Гэхдээ Дата ихсээд ирэхээр мэдээж нөлөөлөх нь дамжиггүй. Энэ шалтгаанаар 2,3-н туршилт хийлээ.

  1. Join Хийхдээ SELECT * гэж бүх баганыг дуудаж байснаа хэрэгтэй 2 баганаа татахаар бичиж үзэв. Хугацаа 14 - өөс 4 sec болтлоо буурлаа бодит амжилт хэхэ. Өмнө нь залхуураад QUERY - гээ дандаа SELECT *  - оор хийчдэг байсан одоо бага ч зүйл дээр хэрэг багануудаа бичиж байя гэж шийдлээ.

 2. JOIN - ийг аль болох хэрэглэхгүй байх нь зөв юм байна. Хэдийн Хүснэгт олон баганатай болох ч хэрэгтэй мэдээллүүдийг давхардсан ч хамаагүй өөр хүснэгт дээр давхар сануулж байхад гэмгүй юм байна. Ганц баганы утга авахын тулд л 3000 мөртэй хүснэгттэй JOIN хийгдэх ер нь буруу шийдэл байх. Би ингэж бодоод MAPPING хийж байгаа хүснэгт дээрээ мэдээний гарчиг, тайлбар гээд хэрэгтэй багануудыг хадгалж байхаар шийдлээ. Магадгүй Мэдээ шинээр сануулахад бага зэрэг ачааллах байх. Гэхдээ мэдээ нэмэх, мэдээ үзэх 2-ын мэдээ үзэх нь их байлгүй гэж бодлоо.

3. Хүснэгтүүд дээрээ INDEX нэмж үзлээ. Өмнө PRIMARY KEY-с өөр юмгүй байсан бол одоо хайлтад их орж байгаа баганууд дээрээ INDEX нэмчлээ. Хурд мэдэгдэхүйц сайжирч байна. Ер нь Query - ний чинь Where хэсэгт их орж ашиглагдаж байгаа баганууд дээрээ Index өгчихөд гэмгүй. Их өгөгдөлтэй хүснэгтийн хувьд.

За ингээд өгөдлийн сангаа зөв зохион байгуулж зөв ашиглаарай. Ихэнх хурдны асуудал энд байдгым шд ээ. Цаашдаа мэдэж сурсан зүйлсээ хуваалцана аа

Monday, June 4, 2012

  Хэдэн өдөр сервэр удаж гацаад вэбүүд рүү орж болохгүй толгой гашилгалаа. Сервэрийн тохиргоог нь уг нь нээх өөрчлөөгүй ийн core config үүдийг. Тэгээд судалж үзсэн чинь apache-г multi threaded болгож болдог энэ нь ачааллах хурдыг нь ихэсгэдэг талаар мэдэж авлаа. Тэгээд сервэрээ шалгаж үзтэл mpm_prefork буюу single thread тэй тохиргоотой байна. Multi thread нь mpm_worker гэж гардаг юм байна. Шалгая гэвэл apache2 -V гээд бичээрэй.


Sunday, June 3, 2012

  Мэдээллийн технологийн чиглэлээр сурч ажлаад бас ч гэж чамгүй хугацааг өнгөрөөлөө. Энэ хугацаандаа  юу хийж, юу бүтээсэн талаараа бодлоо. Нүдэнд харагдах юм нээх ч, ер нь алга. Ухаантай, мэдлэгтэй, чадвартай хүмүүсийг харж, биширч энэ хүн шиг болно доо гэж бодохоос өөр хийж гийгүүлсэн юм алга. Тиймээс энэ цагаас эхэлж өөртөө шинэчлэлт хийж ирээдүйнхээ төлөө, өөрийнхөө төлөө юм хийе, хийхийг эрмэлзэе гэж бодлоо.
  Анхны алхам бол "залхуурал". Энэ том садааг давж чадвал би байтугай Монгол хөгжих гээж байна. Ингээд өнөөдрөөс Ts8060-ийн Блог нээгдэж мөн миний хувьд цоо шинэ өдрүүд эхэлж байна. Блог дээр нийтлэл бичихээс залхуурахаа байж аль болох сурч хөдөлмөрлөхөд их цаг зарцуулахыг хичээнээ. Амжилт залуусаа :)