Büyük ölçeklenebilir ve sürdürülebilir bir web uygulamasında ORM veya SQL?

5 Cevap php

Zaten bu konu ile ilgili internet üzerinde yüzen mesajların bir yeri vardır biliyorum.

Ancak, birçok kişi bu konuda konuşurken farklı şeyler odaklanma eğilimindedir. Benim ana hedefi bakımı kolay ölçeklenebilir bir web uygulaması oluşturmak için. Geliştirmek ve korumak için hız çok fazla ham performansı daha bana göre takdir edilir (ya da i yerine Java kullanılmış olabilir).

I bir proje kod boyutu büyür zaman, sıçramalı kodu olması gerektiğini fark etmiş olmasıdır. Ben ilk usul şekilde benim uygulama yazdığımda, ve herhangi bir çerçeve olmadan sadece 1 ay sonra bir kabus oldu. Ben tamamen spagetti kod hatlarının ormanda kayboldu. Ben birini uygulamak çok kötü savaşmış olsa bile, hiç bir yapıya sahip değildi.

Sonra ben yapıya sahip ve doğru şekilde kod zorunda olduğunu fark etti. Ben CodeIgniter'ı kullanmaya başladı. Bu gerçekten beni yapısını ve sıçramalı kodu verdi. Kullanıcıların bir sürü çerçeveler şeyler yavaşlama olduğunu söylüyorlar, ama onlar resmi cevapsız düşünüyorum. Kod bakımı ve anlaşılması kolay olmalıdır.

Çerçeve + cepten + MVC özellikler ekleyerek artık bir sorun değildi ki benim web uygulaması öylesine yapılandırılmış yaptı.

I bir model oluşturmak, ben bir veri nesnesini temsil ettiğini düşünmek eğilimindedir. Belki bir form veya hatta bir tablo / veritabanı. Yani ORM (doktrin) düşündüm. Belki bu yüzden kendimi tekrar özellikleri odaklanmak olamazdı ve ona daha fazla yapı veren benim web uygulaması içine başka büyük uygulama olacaktır.

Ancak, daha önce herhangi bir ORM hiç kullanılmamış ve bunu kullanmak için iyi ve neden ben sadece bunun temellerini öğrendim.

Yani şimdi Im adil bir çerçeve + + mvc oop gibi sıçramalı kodu olması gerekir beni rahat kodu için çalışıyoruz ve ne kadar önemli olduğunu biliyoruz tıpkı, ORM (doktrin) olduğunu hepinizle soruyorsun?

Ben daha fazla hayat tecrübesi tavsiyeleri istiyoruz "ham sql hızlıdır" tavsiyeleri, çünkü ben sadece ham performans umurumda olsaydı, ben ilk etapta çerçeve + + mvc oop düştü ve bir kodlama kabus yaşayan tutulması gerekirdi.

Bu modeller tabloları bir MVC çerçeve içine çok iyi uyuyor gibi hissediyor.

Şu anda kendimi çok üzerinde X ile giriş almak ve e-posta ile giriş almak, adıyla giriş almak, id tarafından bir giriş almak kolay gibi şeyler yapıyor bir dosyada 150 gibi sql sorguları var. i ORM bu satırları azaltmak, yoksa bu gelecekte 1000 sql hatları artacağı oldukça emin im düşündüm. I bir sütun değiştirmek ve eğer, ben hepsini değiştirmek zorunda! Yine sadece düşünmeye ne bir kabus. Ve belki bu da bana MVC modeline uygun güzel modeller verebilir.

ORM yapısı ve sürdürülebilir kod gitmek için doğru yolu nedir?

5 Cevap

, Ajsie

Benim oy ORM içindir. Ben NHibernate kullanın. O mükemmel değil ve oldukça büyük bir öğrenme eğrisi vardır. Ama kod çok daha OOP, çok daha rahat olduğunu. Onun yinelenen kod bir sürü gibi sürece bir ORM olmadan OOP kullanılarak bir uygulama oluşturmak için neredeyse imkansız. Kesinlikle muhtemelen SQL kodunun büyük çoğunluğu ortadan kaldıracaktır.

Ve burada başka bir şey var. Bir OOP sistemi oluşturmak için gidiyoruz eğer, sen zaten kendi O / R Eşleştiricisi'ni yazma bitireceğiz. Olacak, dinamik SQL veya depolanmış procs dediğimiz bir okuyucu veya kümesi olarak veri almak, bir nesne, tel kadar diğer nesnelere ilişkiler bu dönüştürmek, yazmak vb Ne sql insert / update, içine nesne değişiklikler açmak gerekir NHibernate ya da uzun bir süre için piyasada oldu bir şey daha yavaş ve daha adamcağız.

Sizin yalnızca diğer seçenek gerçekten çok veri merkezli, usul uygulaması inşa etmektir. Evet, bazı alanlarda daha hızlı gerçekleştirebilir. Ben performans önemli olduğunda hemfikir. Ama önemli YETER onun hızlı. Eğer bir kaç milisaniye orada burada usul kodu yapıyor kaydederseniz, kullanıcıların performans artışı fark etmez. Ama 'berbat kodunu fark edersiniz.

Bir ORM büyük performans darboğazlar sağ ön almak için yol ve tembel-yük nesneler vardır. Bu ORMs ile n-sorgu sorunlar içine alır. Ancak, bu kolayca çözülür. Sadece performans ayarlamak nesne sorguları ve veritabanı çağrıların sayısını sınırlamak, zaman zaman da tüm veritabanı vurmak kalmaz NHibernate aynı zamanda zengin bir önbelleğe alma mekanizmasını destekler, vb katılır kullanmak için bunu söylemek.

Ben de performans kullanıcıları ve bakım kodlayıcılar hakkında hakkında olduğunu söylüyorlar olanlar ile katılmıyorum. Kodunuzu kolayca muhafaza değilse, o adamcağız ve özellikler eklemek için yavaş olacaktır. Kullanıcıların bu konuda bakım olacaktır.

Ben her uygulama bir ORM olması gerektiğini söylüyorlar alışkanlık, ama ben en çok yarar olacağını düşünüyorum. Ayrıca gerektiğinde her şimdi ve sonra bir ORM ile yerli SQL veya depolanmış prosedürleri kullanmak için korkmayın. Eğer kayıtları milyonlarca toplu güncellemeler yapmak ya da (umarım ayrı, denormalized raporlama veritabanı karşı) çok karmaşık bir rapor yazmak zorunda kalırsanız sonra düz SQL gitmek için yoludur. OOP, işlem, iş mantığı ve CRUD için Orms kullanın malzeme ve istisnalar ve kenar durumlarda kullanım SQL.

NHibernate ve Soğan Mimarlık Jeffrey Palermo'nun şeyler okumanızı tavsiye ederim. Ayrıca, O / R Mapping, NHibernate ve OOP öğrenmek için onun çevik çizme kamp ya da diğer dersleri alabilir. Kullandığımız thats ne: NHibernate, MVC, TDD, Bağımlılık Enjeksiyon.

Ben orm araçları olmadan, senin gibi gelişmekte başladım.

Sonra ben yazılım geliştirme fazla sanayileşmiş şirketler için çalıştı, ve hepsi (daha fazla ya da daha az özelliklere sahip) orm haritalama aracı çeşit kullanın. Gelişme çok daha kolay, daha hızlı, daha vb sıçramalı kodu üretmek

Ama aynı zamanda bu araçların sakıncaları gördüm: çok yavaş performans. Ama bu (bu durumda hazırda) aletin yanlış kullanımlar daha çok olmuştur.

Orm aracı çok karmaşık bir araçtır, bu yüzden onları kötüye kolaydır, ama onlarla deneyimi varsa, ham SQL ile neredeyse aynı performansı almak mümkün olmalıdır. Senin için üç tavsiye olurdu:

  • Performans kritik değilse, (i php ile gelişmekte değilim, iyi bir seçim, bu yüzden ben size bir isim veremem) bir orm aracı kullanmak
  • Sql ORM aracı üretmek kontrol ve (örneğin bir günlüğü tesis sayesinde) veritabanına göndermek için, her eklemek özelliği için emin olun. Sizin sorguları yazılı olurdu yolu ise düşünüyorum. Orm araçları yetersizlikler çoğu db toplanmıştır istenmeyen veri gelen, vb birden fazla olanlar, eşsiz isteği bölünmüş Yavaşlık nadiren kendisi aracı geliyor
  • Her şey için aracı kullanmayın. (Eğer çiğ db erişimi yapmak her zaman dayanıklılığını azaltır) kullanmak için değil zaman akıllıca seçin, ama bazen bu ORM aracı için geliştirilmiş değildi şeyler yapmaya çalışıyorum sadece kötü değil.

Edit: Orm tool are most useful with very complex model : many relationships between entities. Which is most of the time encountered in configuration part of the application, or in complex business part of the application. So it is less useful if you have only few entities, and if there is less chance they get changed (refactored).

Birkaç varlıklar arasındaki sınır çok net değildir. Ben (tabloları birleştirmek olmadan sql tablolar,) daha o 50 değişik türleri söyleyebilirim çok olduğunu ve daha az 10 azdır.

Ben stackoverflow oluşturmak için kullanılan ne bilmiyorum ama çok dikkatli önce test performans olmalı.

Böyle ağır bir yük alacak bir web sitesi kurmak ve bu deneyimi yoksa, zaten verilerin gerçek seti ile (bu tür sitelerde performans testi çalıştım takım birini almak için denemek istiyorum ve eşzamanlı kullanıcı temsilcisi sayısı) uygulamak kolay ve hızlı bir iş değildir. Onunla deneyime sahip birisi olması büyük ölçüde sürecini hızlandırır.

A lot of users say that frameworks are slowing things down, but I think they missed the big picture. The code MUST BE MAINTAINABLE and EASY TO UNDERSTAND.

Performans Teh Suck ise iyi yapılandırılmış, yüksek sıçramalı sistem değersiz olduğunu!

Maintability bir uygulama inşa coder'lara yarar sağlayan bir şeydir. Ham performans işlerini (ya da herneyse) için uygulamasını kullanmak gerçek insanlar yararlanır. Yani, kimin endişeler şeyden olmalı: sistem kurmak isteyenler ya da bunun için ödemek isteyenler?

Belki de daha fazla hata, onları düzeltmek için kesinlikle daha fazla zaman, uygulama geliştirmeleri uygulamak için daha fazla zaman - Ben müşteri sonunda bir kötü yapılandırılmış sistem için ödeyecek çünkü, bu kadar basit değil biliyorum. Genellikle olduğu gibi, her şey bir trade-off.

Onun yüksek bir maintainabilty olması çok önemlidir. Ive lowlevel süper yüksek performans ile büyük ölçekli web uygulaması geliştirdi. Büyük dezavantaj yeni özellikler geliştirmeye, yani, sistemi korumak oldu. You'r gelişmekte yavaşlatmak için ise müşterilerin .. Onun bir ticaret diğer sistemleri / uygulamaları için bakacağız. Eğer sql doğrudan optmized sorguları yapmak gerekiyorsa ORMs çoğu özelliklere sahiptir. Orm kendisi darboğaz değil. Hasta iyi bir db tasarım hakkında onun daha söylüyor.

Ben resmi cevapsız düşünüyorum. Performans onlar maintainability hakkında hiç umurumda değil, kullanıcılar için günlük olduğunu. Sen etnosantrik olmak, sadece kişisel kaygılar değil sistemi için ödeme halkının olanlar için endişe vardır. Bu değil, t tüm kolaylık.

Belki de kullanıcılar ile oturup onları bir veya iki gün için sistemi kullanmak izlemek gerekir. Thenyou onlar (bir dev makine değil) kullanın ve sistem gün boyu kullanılarak bir şey yapıyor ama bütün bir hafta geçirmek olanlar gibi aynı güç bir PC oturup gerekir. Sonra kendi bakış anlamak olabilir.