Hangisi daha hızlı: Büyük JSON veri kümelerinde PostgreSQL vs MongoDB?


10

Ben ~ 300 bayt her 9m JSON nesneleri ile büyük bir veri kümesi var. Bunlar bir bağlantı toplayıcısının gönderileridir: temel olarak bağlantılar (bir URL, başlık ve yazar kimliği) ve yorumlar (metin ve yazar kimliği) + meta veriler.

Alt kayıtlara işaret eden kimlikleri olan bir dizi alanına sahip olmaları dışında, bir tabloda ilişkisel kayıtlar olabilirler.

Hangi uygulama daha sağlam görünüyor?

  1. PostgreSQL veritabanındaki JSON nesneleri (tek sütunlu tek bir büyük tablo, yani JSON nesnesi)
  2. MongoDB'deki JSON nesneleri
  3. JSON nesnelerini sütunlara patlatın ve PostgreSQL'de dizileri kullanın

Birleşimlerdeki performansı en üst düzeye çıkarmak istiyorum, böylece ilginç analizler bulana kadar verileri masaj edip araştırabilirim, bu noktada verileri her analize özgü bir forma dönüştürmenin daha iyi olacağını düşünüyorum.


kar tanesi kontrol etmek isteyebilirsiniz. Hem yapılandırılmış hem de yarı yapılandırılmış verileri birlikte işleyebilir. www.snowflake.net

"Birleşimlerdeki performansı en üst düzeye çıkarmanın" sizin için ne anlama geldiğini genişletmeniz gerektiğini düşünüyorum. Ne katılıyor?
Spacedman

Yanıtlar:


10

Veri yüklemesi için Postgre, MongoDB'den daha iyi performans gösterir. Sorgu sayılarını döndürürken MongoDB neredeyse her zaman daha hızlıdır. PostgreSQL, dizin kullanan sorgular için neredeyse her zaman daha hızlıdır.

Şuna bak web sitesi ve bu daha fazla bilgi için de bir tane. Çok ayrıntılı açıklamaları var.


Çok iyi bağlantılar, özellikle daha ayrıntılı ve kapsamlı görünen ilk. Yıl (dize) ararken ve kayıt kimliğini (int) döndürürken, potgresql yaklaşık 4 kat daha hızlıdır, ancak yazar döndürülürken büyüklük sırası aynıdır. MongoDB, yazar döndürüldüğünde sadece% 20 daha yavaştır. Bir int döndürmek ve bunu açıklayabilecek bir dize döndürmek arasında temel bir fark var mı? Yani, eğer recid bir string olsaydı, postgresql'in avantajı ortadan kalkar mı ve her ikisi de yazardakiyle aynı mıdır?
MASL

1

Mongodb'un şematik tasarımından daha fazla yararlanabilirsiniz. Bu, veri yapılarını anında değiştirmenin çok kolay olduğu anlamına gelir.

Mongodb'a katılmak diye bir şey yoktur. Yani nasıl bir veri hakkında düşünmek ve nasıl kullanılacağını belge tabanlı ve şematik db ortamları hesaba katmak için değiştirilmesi gerekir.

Belki perspektif ve öncelikler değiştikçe hız daha az önem kazanır.

Umarım bu yardımcı olur.

Todd


En son kıyaslamalarda, PostgreSQL tamamen MongoDB'ye sahipti ...
QUIT - Anony-Mousse

@ Anony-Mousse: İlginç. Herhangi bir kaynak biliyor musunuz?
Isaac

ör . diğer cevaptan tiborsimko.org/postgresql-mongodb-json-select-speed.html ve enterprisedb.com/postgres-plus-edb-blog/marc-linster/… . Bunun temel nedeni: Postgres'in iyi dizinleri vardır, ancak MongoDB'deki dizinler buna değmez. Ayrıca Postgres, performansı önemli ölçüde artıran BSON desteği ve JSON ile ilgili diğer eklemeler aldı. Bu yüzden ilk versiyonlardan çok daha hızlı oldu.
QUIT - Anony-Mousse

0

Bahsettiğiniz sayılar için, tüm alternatiflerin çalışması gerektiğini düşünüyorum (okuyun: analizinizi makul sürede bitirebileceksiniz). Çok daha hızlı sonuçlara yol açabilecek bir tasarım öneriyorum.

Daha önce yanıtlandığı gibi, genel olarak postgresql mongodan daha hızlıdır, bazen 4 kat daha hızlıdır. Örneğin bakınız: http://www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality

Birleştirmelerdeki performansı iyileştirmek istediğinizi söylediniz. Varlıklar arasındaki benzerlikleri hesaplamakla ilgilendiğinizi varsayıyorum (örneğin, yazı, yazar), böylece esas olarak tabloya kendiniz (örn. Posta veya yazar tarafından) ve toplu olarak katılacaksınız.

Buna ilk yüklemeden sonra veritabanınızın salt okunur olacağını, sorunu endeks kullanımı için çok uygun kılan gerçeğini de ekleyin. Dizin güncellemesi için ödeme yapmayacaksınız, çünkü hiçiniz olmayacak ve sanırım dizin için fazladan depolama alanınız var.

Postgres kullanmak ve iki tabloda verileri depolamak olurdu:

tablo gönderileri yarat (post_id tamsayı, url varchar (255), author_id tamsayı);

- Verileri yükleyin ve ardından endeksleri oluşturun. - Bu daha hızlı bir yük ve tablo mesajlarını değiştirmek daha iyi endekslere yol açacaktır kısıtlar post_pk birincil anahtar (post_id); yayınlarda post_author dizini yarat (author_id);

tablo yorumları oluşturma (comment_id tamsayı, post_id tamsayı, author_id tamsayı, comment varchar (255)); tablo yorumlarını değiştir kısıtlama yorumlar ekle_pk birincil anahtar (comment_id); yorumlarda index_author dizini oluşturun (author_id); yorumlarda index_post dizini oluşturun (post_id);

Sonra m seçili sorgularda yorumlara dayalı olarak yazar benzerliğini hesaplayabilirsiniz. m_author_id olarak author_id, a. author_id'i a_author_id olarak sayın (ayrı m.post_id) yorumlardan gelen yayınlar olarak m olarak yorumları m.author_id tarafından kullanılan (post_id) bir grup olarak yorumlara katılın. AUTHOR_ID

Eğer nlp için yorumdaki kelimeleri tokenlemekle ilgileniyorsanız, bunun için başka bir tablo ekleyin, ancak verilerinizin hacmini önemli ölçüde artıracağını unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.