Oturumu büyük miktarda veri depolamak için en iyi yer [kapalı]

3 Cevap

Ben seans başına büyük miktarlarda veri depolamak ve tekrar kullanmak için gereken bir uygulama inşa ediyorum.

Yani, örneğin, kullanıcı daha sonra bu seçimi kaydetmek ve başka bir şey yapmak, başka bir sayfaya çıkmak ve sonra tekrar orijinal gelmek (ki 2000 veya önemli ölçüde daha fazla) kendi anahtarı olarak bir sayısal değere sahip olan liste öğeleri büyük bir listesini seçer sayfa ve sayfanın içine kendi seçimlerini yüklemek gerekir.

Bu verileri depolama ve yeniden en hızlı ve en etkili yolu nedir? Oturum kimliği ile kaydedilmiş bir metin dosyasına? Geçici bir db tabloda? Oturum verileri kendisi (db oturumları boyutu sınırı değil yani) tefrika dize kullanarak veya gzcompress veya gzencode kullanarak?

Herhangi bir tavsiye veya fikir harika olurdu!

Thank you!!

3 Cevap

Normalde ben her zaman oldukça basit dosyaları daha bir veritabanında veri tutmak için kullanıcılara tavsiye ederim rağmen, bu bir istisnadır. Genel olarak, orada dosyaları ile karşılaştırıldığında bir veritabanında veri saklamak hafif havai - ama eski erişim üzerinde büyük bir esneklik sağlar ve kilitleme sorunların çoğunu ortadan kaldırır. Eğer sayfa aynı oturum erişen birden fazla tarayıcı ile çalıştırmak için and, kullanıcıların özellikle yavaş döner beklediğiniz sürece Ancak, daha sonra eşzamanlılık büyük bir sorun olmayacak, yani

Veritabanı her türlü kullanarak yavaş olacaktır

(- 200'den fazla - Eğer webserverların büyük bir küme ile ilgili olacak eğer aynı zamanda, aynı oturumu paylaşan, o zaman evet, bir dağıtık veritabanı bir SAN üzerinde bir küme dosya sistemi daha iyi performans gösterebilir).

Muhtemelen oturumu yazılı olacak ne sıklıkta düşünmek istiyorum. Varsayılan işleyici geri diske değiştirilir veya değil olursa olsun, eğer her zaman veri yazar - Böyle büyük bir oturum için, ben size dosyaya, sadece tefrika oturum verileri değil yazar kendi oturum işleyicisi yazmak kullanmanızı öneririm , ama aynı zamanda seri hale getirilmiş verileri bir karma saklar - Eğer oturumda okurken, statik bir değişken olarak karma saklayın. Yılında, işleyicisi kaydetmek, yeni bir karma oluşturmak ve yük zaman doldurulan statik değişkeni ile karşılaştırmak - bu değişti yalnızca oturumu yazmak. Hangi güncelleme sık ve daha az sık sık değişti parçalardır bölüme oturumu ayırmak için buluşsal yöntemler uygulayarak bu daha genişletmek olabilir, o ayrı dosyalarda bu kayıt.

Bunun için sıkıştırma kullanarak gerçekten performansı ile yardım edecek değildir.

Orada kapsamı bu optimize OS seviyesi ayar bir sürü için kesinlikle - ama OS ne olduğunu söylemiyorum. Onun POSIX ve sisteminizi varsayarak, onun dizlerinin üzerinde değil zaten, sonra perormance hit olacak:

Latency in accessing the data file and parsing the data

(Dosyayı okumak için zamanı nispeten küçük ve yazma tamponlu olmalıdır).

Sürece yeterince önbellek olduğu gibi, dosya bellekten ziyade diskten okunacak, böylece gecikme önemsiz olacaktır.

C.

yine istediğiniz. Ama tercih ne olursa olsun, bir dizi dize serileştirilir ve bir dosyaya (dolaylı, oturumları kullanarak) veya bir veritabanı alanında ya tutulacaktır. Okuma ve yazma hızlı böylece aramada, bir dosya üzerinde yapılır. Bunun için bir veritabanını kullanmak için hiçbir neden göremiyorum.

Alternatif serileştirme için, bu aracı kontrol: http://msgpack.sourceforge.net/

Bir veritabanı için bu para cezası çalışacaktır. Sadece bir ziyaretçi tabloya oturumu bağlantı ve satır gibi seçili öğeleri depolayan visitor_list_items adında bir tablo var.

2000 almak için deli numarası değil. Ben orada oturup 2000 liste öğeleri seçmek olacak eğer sayfa yüklemek için, onlar bir saniye bekleyebilir, Tanrım, demek! (Eğer bu seçim süreci adımlar içine kırmak için bir yol olmadığından emin misiniz?)

Bu db buysa, geleneksel db kullanır (sitenizde, vs .. geldiğinizde ziyaretçiler seçerek hangi ürün üzerinde, yani daha kolay rapor çalıştırın) kullanabiliyorlar.