Di Google App Engine, model gabung banyak-ke-banyak apa yang paling efektif?

9

Desain BigTable menolak banyak filosofi model relasional standar, secara eksplisit lebih memilih denasionalisasi daripada sejumlah besar tabel kecil.

Salah satu area yang lebih besar di mana ini merupakan masalah adalah dalam pemodelan banyak ke banyak bergabung.

Salah satu cara untuk memodelkan gabungan ini adalah dengan melanggar bentuk normal pertama, dan meletakkan semua data menarik dalam db.ListProperty (). Meskipun ini memiliki kemampuan untuk dapat dicari dari kueri, saya belum mengeksplorasi implikasi kinerja dari pencarian daftar versus menarik tabel lain.

Sebagai bergabung tidak mungkin, adalah mungkin untuk nge-link tabel melalui RelationshipProperties. Oleh karena itu, dengan upaya yang cukup, tabel persimpangan standar (tabel dengan kunci primer bersama yang mereferensikan kedua tabel induk) dapat dibuat. Adakah yang telah menjelajahi hasil kinerja berbagai implementasi?

-Edit-

Sementara Daftar Kunci yang disarankan dalam dokumentasi memang merupakan salah satu cara untuk melakukannya, saya tertarik pada kinerja dan tingkat anomali dari itu dan implementasi lainnya. Apakah ada utilitas dalam membuat daftar kunci timbal balik? Apakah upaya yang terlibat dalam pengulangan layak dengan harga? Apakah ada cara yang lebih baik untuk melakukannya?

Brian Ballsun-Stanton
sumber

Jawaban:

3

Saya juga bekerja dengan GAE datastore sekarang, Anda harus memeriksa artikel ini jika Anda belum melakukannya. Jika Anda menemukan sesuatu yang bermanfaat, perbarui pertanyaan Anda.

EDIT:

Saya menemukan ini hari ini , periksa.

eiefai
sumber
0

Dalam pengalaman saya di GAE, Anda harus menggunakan kueri tabel dengan hemat. Menambahkan tabel "gabung" hanya akan memperlambat lebih banyak hal. Misalnya, jika Anda memiliki tabel A dan B yang berbagi hubungan banyak ke banyak, dan Anda membuat tabel "gabung" J dengan bidang RelationshipProperty ke A dan B, Anda harus meminta J setiap kali Anda ingin menemukan catatan terkait (entitas).

Akan jauh lebih cepat untuk memiliki Daftar Kunci di A atau B (atau keduanya jika perlu) karena mereka akan dimasukkan ketika Anda mengambil catatan / entitas itu. Selama Anda tidak memiliki terlalu banyak kunci dalam daftar (yaitu, entitas tidak terlalu besar), inilah cara yang harus dilakukan.

Saya sudah mulai menggunakan ndb pada aplikasi saya dan ada beberapa manfaat signifikan untuk menggunakan kunci saat mengambil entitas. Jika entitas sudah di-cache, itu akan menariknya dari memori atau memcache terlebih dahulu. Jadi, jika ada tumpang tindih yang signifikan dalam Daftar Kunci Anda, pengambilan akan jauh lebih cepat untuk entitas yang sudah diambil.

Brent Washburne
sumber