Bir süredir NoSQL DB kullanıyorum ve bu konuya katkıda bulunuyorum:
Bir harika bir kullanım durumu bir NoSQL veritabanı için bir uygulamadır istatistik ve / veya raporlar nesil verileri üçüncü taraf kaynaktan temin edilir, expecially.
Böyle bir durumda bir NoSQL veritabanı mükemmel bir seçim olabilir
Örneğin, MongoDB'yi ele alalım :
Eğer JSON verilerinizi aldıktan sonra (bir üçüncü taraf API gelebilir veya bir sql-uygulamadan ihraç edilecek) içinde MongoDB oldukça edilir ithalat strightforward ve güncellemek JSON verilerini veritabanında; örneğin komut satırı mongoimport
yardımcı programını kullanma
Bu noktada, bu tür uygulamalara çok uygun olan filtreleme ve gruplama ile dinamik sorgular oluşturmak çok basittir .
Örneğin, Toplama Çerçevesi'ni kullanarak :
$pipeline = [];
//filter by date
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ] ] ];
//if we want to filter by a specific field, we add the filter to the pipeline array
if( $filters->isFilterByField() )
$pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];
//group the results by date and get the count
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ];
return $collection->aggretate( $pipeline );
Ben pham veri yapıları kullanarak ve sorgu oluşturmak için sıkıcı dize birleştirme kaçınarak dinamically filtreleri eklemek / kaldırmak hangi kolaylığı işaret etmek istiyorum . Bu yaklaşımla, dinamik olarak filtreleri eklemek / kaldırmak, bir diziden eleman eklemek / çıkarmak kadar kolaydır
Bir başka büyük fayda, böyle bir çözümün , ihtiyaç duyduğumuz tüm verileri elde etmek için farklı tablolarla birleştirmemiz gereken ilişkisel bir veritabanı kullanmaktan daha hızlı olması gerçeğinden kaynaklanmaktadır.
Ayrıca, NoSQL veritabanının tüm temel sınırlarından kaçındığı için bu kullanım durumu en uygunudur :
İşlem eksikliği: Uygulama yazma gerçekleştirmez, sadece okur, bu nedenle işlemlere hiç ihtiyacımız yok
Tablolar arasında birleşme olmaması: Birleştirmeye ihtiyacımız yoktur, çünkü koleksiyonlardaki normalize edilmemiş verilerimizi depolamak için artıklık kullanabiliriz . Yalnızca verileri okuduğumuz için, normalleştirilmemiş verileri güncellemeler arasında senkronize etme konusunda endişelenmemize gerek yoktur.
Bu şekilde , verileri tekil koleksiyonlara odaklanacak şekilde sorgularımıza tam olarak uyacak şekilde yedekli olarak depolamaya odaklanabiliriz.
Bunu sadece yazıyorum çünkü birkaç kez önce böyle bir şey okumuş olsaydım, araştırma yapmak için biraz zaman kazanmış olurdum
Umarım birisi için yararlı olur