Ne sadece bir tamsayı depolamak için seçilir?

6 Cevap php

Ben PHP küçük bir web-hizmet inşa ettik. Belirli bir API yöntemi çağrıları sayısını kontrol etmek istiyorum.

I thought at first of using a text file, because it's just an integer. But after taking a good look at SQLite it seemed much more convenient. So the code is just: get the "counter" from SQLite and increment it when that method is called, then store it back on SQLite db.

Bu bunu yapmanın doğru bir yolu var mı? Sadece belki bir dosya ya da ... başka bir şey kullanmak daha basit ve ölçeklenebilir olurdu?

Şimdiden teşekkürler.

6 Cevap

Gerçek bir veritabanında bir metin dosyası ve dosya (lar) şu anda açık olduğunu ve onu açmak için yeni bir isteği olursa, ikinci isteği dışında hata nerede bir SQLite DB sorunları kilitleme var olacak hem de koy. MySQL, MSSQL, ya da ne olursa olsun mevcut gibi gerçek bir DB kullanın.

Üçüncü olasılık: memcachedb. o memcached ile uyumlu, ama saklar bir bdb dosyaya anahtar-değer deposu bulunuyor. bu komutları yazma-okuma, aynı zamanda sayısal değerler için atomik arttırma / eksiltme kalmamış.

bir daha alternatif bir 'karşı sunucu' yazmak olacaktır. gets bağımsız bir süreçtir 'okundu' ve 'artım' bir soket üzerinde komutları. avantajı 'atom' artışlarını yapmak gerçekten kolay olmasıdır. Bu eşzamanlılık sorunları olmadan, basit bir dosya üzerinde bu sayaç (lar) var depolayan birden fazla sunucu asla beri.

diske her birkaç saniyede bir kızarma, bir anda C sadece dar bir döngü işleme tek bir komut daha az bir yüz hatlarında yazmak kolay olmalıdır. işlem çok basit olduğu, gecikme az.

Bir veritabanı genellikle dosya sistemi daha iyi ölçek olurdu, ancak dikkatli olmak ve mekanizması ile ya uygun kilitleri kullanmak ihtiyacımız olacak.

Tabii ki düz dosya kullanabilirsiniz.

  • Bunu yapmak için doğru şey olacaktır
  • Son derece basit
  • Üçüncü taraf kitaplığı yok bağımlılık
  • Sen sadece düz Not Defteri ile sayacı görüntülemek veya güncellemek mümkün olacak.
  • (Hiçbir SQL ayrıştırma, başka hiçbir havai) SQLite'ta daha hızlı
  • ve SQLite gibi ölçeklenebilir (SQLite sadece daha karmaşık düz dosyaları)

If you will ever need something as fast as possible, you will have to make persistent process in memory to eliminate I/O bottleneck. But please... just don't use SQL database to store single integer.

Sen shared memory sayacı tutmak için kullanabilir, ve locking güvenli artışlarını sağlamak.

SQLite göre, "100K [sic] / gün vurur" kadar gidebilir siteleri işleyebilir. Bunu üzerine gidiyoruz, MySQL gibi daha sağlam bir veritabanı araştırmak gerekebilir. Eğer bir web sitesi için her gün veritabanına 100k kayıtları yazıyoruz eğer Ama bir şey örneğine dayanarak, ne yaptığınızı yanlış olduğunu düşünüyorum. Bu gerçekten önbelleğe alma için bir iş gibi geliyor. PHP hakkında hiçbir şey bilmek, üzgünüm ki.

Onlar SQLite vs dosyaları hakkında söylenecek bu var:. "Birçok program ev yetiştirilen formatta veri dosyaları oluşturmak ve yönetmek için) () (,) (fread Fopen kullanın ve fwrite SQLite bu reklam için bir yedek olarak özellikle iyi çalışır hoc veri dosyaları. " (source)