2010-06-03 13 views
11

Rails geliştirme için MySQL'den Postgres'e geçmeyi düşünüyorum ve sadece bu hamleyi yapan diğer geliştiricilerin bunun hakkında neler söylediğini duymak istiyorum.MySQL'den Postgresql'e kaçınız gitti? Buna değdi?

Kişisel deneyimler arıyorum, bir Mysql v Postgres shootout değil, sadece kendinize ulaştığınız artıları ve eksileri. İnsanların mutlaka düşünemeyeceği şeyler.

İlk etapta neden taşındığınızı açıklamaktan çekinmeyin.

+0

topluluk wiki olmalı bir kesinti durumunda

  • PostgreSQL derece sağlam ve çökme güvenlidir MySQL daha kararlı ve olgun hissetti - - Buna tek bir doğru cevap yoktur. –

  • +0

    Sayısız benzer soruların varlığından bahsetmiyorum. –

    +0

    Doğru cevap, ben sorduğum gibi mysql gelen postgres taşıma hakkında en ayrıntılı ve içgörü sağlar gönderi olacaktır. Ve buradaki soru, özellikle diğer yayınların aksine Rails geliştirme ile ilgilidir. – concept47

    cevap

    8

    Düğmeyi yaptım ve açıkçası daha mutlu olamazdım. Postgres'in MySQL'in birkaç şeyi yokken (Insert Ignore, Replace, Upsert stuff ve Load Data Infile, benim için esas olarak), sahip olduğu özelliklerden daha fazlasını içerir. Saklı yordamları çok daha güçlüdür ve Postgres'te karmaşık işlevler ve kümeler yazmak çok daha kolaydır.

    Performans açısından, eğer InnoDB ile karşılaştırıldığında (ki bu sadece MVCC'den dolayı adildir), o zaman en az hızlı, muhtemelen daha hızlı - bu yüzden bazı gerçek ölçümler yapamıyoruz kısıtlamalar, ama kesinlikle bir performans sorunu olmadı. Birkaç birleştirmeler ile karmaşık sorguları kesinlikle daha hızlı, daha hızlı ÇOK vardır.

    Postgres topluluğundaki sorununuza doğru cevabı alma olasılığınızın daha yüksek olduğunu düşünüyorum.Herkes ve büyükannelerinin MySQL'te bir şeyler yapabilmeleri için 50 farklı yolu vardır. Postgres ile, posta listesine vurun ve çok fazla yardım almanız olasıdır.

    Sözdizimi ve benzeri farklılıklardan bazıları önemsizdir.

    Genel olarak, Postgres bana daha çok "yetişkin" hissettiriyor. Yıllarca MySQL kullandım ve bundan kaçınmak için yolumdan çıkıyorum.

    +0

    Daha fazla kabul edilemedi. Anneannem her zaman MySQL'deki çalışma kontrol kısıtlamalarının eksikliğinden ötürü yeni bir crackpot şemaları ile beni rahatsız ediyor. –

    5

    Ah canım, bu gözyaşlarıyla sonuçlanabilir.

    Kişisel deneyimden bahsetmişken, yalnızca üretim sistemimiz (Heroku) PostgreSQL'i çalıştırdığı için MySQL'den taşındık. PostgreSQL üzerinde kırılan MySQL sorguları için özel olarak oluşturduk. Öyleyse, buradaki hikayenin moralinin her şey üzerinde aynı DBMS üzerinde çalışmak olduğunu düşünüyorum, aksi takdirde sorunlara karışabilirsiniz.

    Bazen, Über-hızlı-gibi kayıtlar eklemek zorundayız. Bunun için, bizim app PostgreSQL yerleşik COPY fonksiyonda, bu gibi kullanılabilen kullanın:

    query = "COPY users(email) FROM STDIN WITH CSV" 
    values = users.map! do |user| 
        # Be wary of the types of the objects here, they matter. 
        # For instance if you set the id to a string it will error. 
    
        %Q{#{user["email"]}} 
    end.join("\n") 
    
    raw_connection.exec(query) 
    raw_connection.put_copy_data(values) 
    raw_connection.put_copy_end 
    

    Bu hemen altında iki dakikada veritabanına ~ 500.000 kayıtları ekler. Daha fazla alan eklersek yaklaşık aynı zamanlarda.

    PostgreSQL MySQL üzerinde sahip güzel şeyler Başka bir çift:

    • tam metni
    • Coğrafi sorgulama (PostGIS)
    • LIKE sözdizimi NOT LIKEemail !~ 'hotmail|gmail' gibidir, bu email ~ 'hotmail|gmail' gibidir arama. | bir veya bir gösterir.

    Özetle: PostgreSQL, MySQL'in Lego olduğu & harç tuğlaları gibidir. Sana doğru "hissettiği" ile git. Bu sadece benim kişisel görüşüm.

    +1

    '~' ve '! ~' Regex operatörleridir. '~~' LIKE için bir kısayoldur. Daha fazla detay http://www.postgresql.org/docs/8.4/static/functions-matching.html "COPY" i çağırmak için raw_connection kullanımı kullanışlı bir numaradır. –

    +0

    Ayrıca MySQL'de tam metin araması yapabileceğinize inanıyorum? –

    0

    Düğmeyi kendim yapmadım, ancak Postgre'nin desteklediği MySQL'in işlemsel şema değişikliklerinin olmaması nedeniyle birkaç kez ısırıldı.

    Bu, sqlite ile MySQL sunucunuza dev ortamınızdan taşınırken aldığınız sorunların çözümlerini ortadan kaldırır ve geçişlerinizi mahvettiğinizin farkına varır ve yarısı bitmiş olur! (Hayır, bunu bir üretim sunucusunda yapmadım ama paylaşılan test sunucumuzda bir karışıklık yarattı!)

    1

    PostgreSQL'e 2007'nin başlarında birkaç nedenden dolayı geçiş yaptık (ya da önceki yıl mıydı?). başlıca nedenleri:

    • SQL desteği - PostgreSQL katılır ve birçok örneğin karmaşık SQL sorguları için çok daha iyi ve agrega
    • MySQL'ın saklı prosedürler
    • MySQL lisans değişiklikleri çok olgun hissetmedim - Çift lisanslı, açık kaynak ve ticari, geleceği merak etmemi sağlayan bir bölünme. PG'nin BSD lisansıyla ne istersen yapabilirsin.
    • Hatalı davranış - MySQL satırları sayarken, bazen gerçek sayılan satırlardan değil, yalnızca yaklaşık bir değer döndürdü.
    • Kısıtlamalar, kesik/uyarlanmış değerler ekleyerek biraz tuhaf davrandı. http://use.perl.org/~Smylers/journal/34246
    • Bkz idari arayüzü PgAdminIII

    // John