2010-04-29 27 views
46

ile hangi Python API'si kullanılmalıdır? Mongo ile etkileşim kurarken hangi Python API'sinin kullanılacağı konusunda ileri geri gidiyorum. Peyzaj hakkında hızlı bir anket yaptım ve üç lider aday belirledim.Mongo DB ve Django

? MongoEngine, özellikle Django'yu düşünerek inşa edilmiş gibi gözüküyor. PyMongo, Mongo etrafında ince bir sarıcı gibi görünüyor. Çok fazla güce sahip olsa da, django'yu bir çerçeve olarak kullanarak elde edilen birçok soyutlamayı yitiriyor. Ming, PyMongo ve MongoEngine arasında ilginç bir orta zemini temsil ediyor, ancak bir test sürüşüne çıkma fırsatım olmadı.

cevap

55

, sen PyMongo kaçınamaz - tüm diğer arayüzleri bunun üzerine inşa. Bu diğer arayüzler tartışmasız gereksizdir. SQL ile çalışırken, Django'da kullanılanlar gibi ORM'ler, SQL sorguları ve şemaları oluşturma ve sonuç kümelerini nesnelere ayırma karmaşıklığını azalttıkları için yararlıdır.

PyMongo, zaten bu sorguların uygun ve basit bir API'den geçtiğini ve MongoDB'den gelen sonuçların zaten tanımlanmış olan nesneler (Python'daki - aynı fark) olan nesneler olduğu zaten var. Mongo belgelerinizi Python nesneleriyle gerçekten dekore etmeniz gerektiğini düşünüyorsanız, PyMongo'ya bir SON manipülatörünü eklemeniz çok kolay. Bu yaklaşımla ilgili en güzel şey, doğrudan PyMongo'ya kod yazabilmeniz ve kodunuz ile PyMongo arasında yeni bir API eklemeniz gerekmeden daha sonra ek işlevsellikte kaymanızdır.

Neler kaldı? Şema oluşturma ve geçiş bir şekilde yararlıdır, ancak neredeyse basit bir şekilde yapılabilmektedir. Şayet MongoDB'yi kullanmayı düşünüyorsanız, geleneksel SQL stili modelden ayrılmak isteyebilirsiniz. Ayrıca, tamamen Django uyumlu bir MongoDB ORM olsaydı bunun için biraz mesafe alabilirsiniz. Bundan daha az bir şey ve muhtemelen kendiniz için iş yaratabilirsiniz.

PyMongo'yu kullanarak pişman olmayacaksınız. Eğer üst verimlilik ilgileniyorsanız izlemeye değer

Son bir seçenek burada, PyMongo eşzamanlı olmayan versiyonudur: http://github.com/fiorix/mongo-async-python-driver

+2

Async (twisted) sürücüsüyle herhangi bir kişisel deneyiminiz var mı? MongoDB'yi Twisted uygulamasında kullanmak istiyorum ve buna rastladım, fakat PyMongo'nun belgelerine göre [http://api.mongodb.org/python/current/faq.html?highlight=twisted#how-can-i-use -pymongo-ile-asenkron soketli-kütüphane benzeri bükümlü] (_ Bu proje PyMongo_ daha şu anda daha stabildir). Bu sadece bir üçüncü taraf açık kaynak projesi hakkında bir standart feragatname olabilir, ancak bu da doğru olabilir ... Bu yüzden bu kütüphane hakkında ilk elden yorumlar arıyorum ... –

+1

Burada async sürücüsü yazarı. MongoDB (aynı şirket) tarafından sürdürülen PyMongo ile güncel olmadığı için daha az kararlı olduğu belirtiliyor. Async sürücüsünü uzun zaman önce [resmi belgeler] (http://docs.mongodb.org/meta-driver/latest/legacy/mongodb-wire-protocol/) kullanarak yazdım ve sürücü birçok katkıda bulunanlar tarafından çok gelişti. MongoDB için çalışan kişiler de dahil olmak üzere. Aslında üretimde istikrarlı ve uygun. – fiorix

6

MongoEngine ve Ming'in ikisi de PyMongo'ya bağımlıdırlar - bunun üzerine bazı güzel işlevsellikler koymuşlardır. En azından PyMongo'yu doğrudan kullanmaya başlamanızı öneririm - bu şekilde diğer araçlardan birini kullanmaya karar verirseniz ve sorunla karşılaşırsanız "kaputun altında" neler olup bittiğini anlamak kolay olacaktır. Yani, ben oldukça önyargılı;).

0

resmi Mongodb documentation yaklaşık djongo bahsediyor. SQL sorgularını mongodb sorgularına çevirerek çalışır.

Bunu çalıştırmak için django-nonrel gerekmez.

Tüm yerel Django katkilari modülü, (örn. Admin, kullanici, oturumu) hiçbir modifikasyon olmadan çalişir.

MongoEngine contrib modüllerini yeniden yazma gerektirir ve son kontrol, yerli yönetici modülü MongoEngine çalıştırmak vermedi.

Mevcut modeller de herhangi bir ORM çeviri olmadan çalıştırın. Mongokit, Harold söz için