Gerçekten PHP ve MySQL kalıcı bağlantıları kullanmak ister, ama nasıl olur?

3 Cevap php

Apache her 1 kalıcı bağlantısı olan bir çocuk php süreç, her isteği işlemesi nedeniyle Apache / PHP / MySQL kalıcı bağlantıları böyle kötü bir üne sahip. Ziyaretçiler ölçeklendirme, MySQL tüm apache / php çocuk süreçler, 1 kalıcı bağlantısı ile her birinden maksimum bağlantıları sınırını ulaşır. Geçici tablolar, kullanıcı değişkenleri, chartsets'ten, işlemlerin ve son insert-id sorunlar da var.

Biz sadece MySQL OKUMA çünkü benim durumda, biz, ikincisi sorunları ile uğraşmak zorunda değilsiniz. Db güncelleme yok: Bu farklı bir makinede komut başka bir dizi ile işlenir. Biz kalıcı bağlantıları istediğiniz komut JSON veri döndürmek, AJAX bağlantıları sunucu uç vardır.

Her sayfa gösterimi 5 AJAX istekleri vardır, bu yüzden 6 farklı php çocuk süreçler (5 ajax, 1 html) istenen her sayfa için sunucu üzerinde başlamıştır. İdeal olarak, MySQL php / ajax sunucu SADECE 1 bağlantısı olabilir. Bu bağlantı, tüm php alt süreçler tarafından paylaşılacak.

So, how can I do this? Should I use another webserver software other than apache? ngynx?

şerefe

GÜNCELLEME: Bu durumda, MySQL sunucusuna bağlanmak için doğru yolu (http://bit.ly/15rBDP):

  • using mysql native driver (mysqlnd) and mysqli
  • each client reconnecting using the mysql-change-user function
  • using MYSQLI-NO-CHANGE-USER-ON-PCONNECT in php config ('coz we don't need to cleanup).

GÜNCELLEME 2:

Soruma netleştirmek için, ne ben istiyorum: HEPSİ php istemci işlemleri, sadece TEK kalıcı bağlantısı üzerinden bağlanıyor. Bu bağlantı, tanımlanmış koştu ve bazı how (benim sorum) saklanır, ama tüm yeni php istemci süreçler bunu bilmek ve bunu kullanabilirsiniz edilir. Apache / php ile sorun her php istemci işlemi 1 bağlantısı olmasıdır. Ben Dakikada 20.000 sayfa hizmet varsa, 20.000 kalıcı bağlantıları olacaktır. Ben mysql 1 benzersiz, merkezi, kalıcı bağlantısı bağlanırken 20.000 php çocuk süreçler istiyorum.

3 Cevap

Tüm istekleri için tek (kalıcı) bir bağlantı olan, etkili bir sunucu için tüm istekleri serileştirir fark yoktur. Yani C vb bitirmek isteği A beklemek zorunda olan, bitirmek isteği B için beklemek zorunda talep

Yani bir bağlantısı olan bir tek iş parçacıklı bir uygulama içine multi-threaded/multi-process webserver döner.

Bu yazı üzerine kabul edilen cevabı okuyun: http://stackoverflow.com/questions/1340859/which-is-better-mysqlconnect-or-mysqlpconnect

Basitçe, mysql kalıcı bağlantılarını kullanarak siz de kendi uygulamaları kod yol var donanım kaynaklarına bağlı olarak, iyi ya da kötü olabilir.

Bir php yerli mysql bağlantısı kalıcı bağlantıları için geliştirilmiş destek php 5.3 dahildir.

http://dev.mysql.com/downloads/connector/php-mysqlnd/

http://blog.ulf-wendel.de/?p=211