canlı sohbet: veritabanı veya metin dosyasından doğrudan kaydetme?

3 Cevap php

sohbet oluşturmak için ajax / kuyrukluyıldız kullanmak için gidiyoruz im. ve ben sohbet sohbet saklamak istiyorum.

her basışı o mektubu saklamak olacak backend.php gönderir bir olayı tetikleyecektir. i veritabanı veya metin dosyası doğrudan mağaza gerektiğini merak ediyorum.

Bu sohbet mimarisi olacak tam olarak ne için ayrıntıları dikkate zorunda kalmazsınız. basıldığında her harfi hemen saklanır sadece.

i mysql saklanması halinde (bir kuyruklu yıldız sunucuda php kullanarak im) sonra sadece tek bir harfi her biri için, sorgular bir sürü olacağı düşünülmektedir. kullanıcıları bir çok sohbet ediyorsanız ve o GÜNCELLEME ağır bir yük olacak ve sorgu SELECT olacaktır.

metin dosyaları konuşma saklamak sunucu için daha kolay olacak? sadece açmak harfi eklenecek ve php ile kapatın.

sen ne düşünüyorsun?

3 Cevap

Sql işlemleri gibi birçok dosya işlemlerini olacak. Dosyalar bazı amaçlar için daha hızlı olabilir, ancak veritabanları çok daha iyi dönüşebilecek.

Sana every basışı kovuyor şaşırdım - bazı kullanıcıların yazdığınız kadar hızlı olduğunu biliyor musun?? Ajax (varsayılan) asenkron olmak, hızlı bir şekilde istekleri istifleme olduğunu göreceksiniz ve bu sohbet ortağı yanı sıra sunucu üzerinde yer büyük bir yük teslim ediliyor mesajı geciktirir.

Her kelimeden sonra, hatta bir dönüş Tuşa basıldığında gönderme downgrade olabilir.

Soru: canlı sohbet: veritabanı veya metin dosyasından doğrudan kaydetme?

Cevap: Eğer tüm rastgele sohbet metin ise, bir metin dosyası muhtemelen mükemmel.

Gerekçe: Hiç bu veriler üzerinde ne mümkün SQL sorgu kullanmak istiyorsunuz?

En iyi sen grep dosya tarama gibi bir şey kullanabilirsiniz.

Ilginç özellikleri bir sürü gerçekten karmaşık veri yoksa neden bir veritabanı ile rahatsız?

Örnek:

select username,count(*) as most_active_users from chatroomxxx group by username limit 0,10;

Python:

user_fq = collections.defaultdict( int )
for path, dirs, files in os.walk( 'path/to/chat/logs' ):
    for fn in files:
        with open( os.path.join( path, fn ), "r" ) as source:
            for line in source:
                user, timestamp, text = line.split('\t')
                user_fq[user] += 1
fq_user = collections.defaultdict( list )
for user, fq in user_fq.items():
    fq_user[fq].append( user )
top = []
for fq in sorted( fq_user, reverse=True ):
    top.extend( fq_user[fq] )
    if len(top) > 10: break

Nokta Python SQL olarak veciz olduğu değildir. Nokta sorgu metin dosyaları nispeten basit bir veri toplama olmasıdır.

Ve metin dosyalarını basit bir veri toplama hızlı. Uzak, bir veritabanından çok daha hızlı. Ve aslında sıfır yükü ile.

Sadece dosyaları satırları yazmak. Basit komut ile dosyaları tarar. Hiçbir havai.

I would not send every letter over the network, bu gereksiz ağ trafiği ve veritabanı büyük miktarda üretecek / dosya yazıyor. Bunun yerine send the message when the user has committed to it bir Gönder düğmesi veya Enter tuşuna basarak.

Bir veritabanında saklanması you will need to be able to index the data hızlı alımı için olduğu gibi, bir dosya daha çok daha mantıklı. Bu sırayla dosyasına eklendi olarak, gruplar halinde veri değil almak gerektiğini düşünün.