Sebagai contoh, Google App Engine menggunakan Google Datastore, bukan database standar, untuk menyimpan data. Adakah yang punya kiat untuk menggunakan Google Datastore alih-alih database? Sepertinya saya sudah melatih pikiran saya untuk berpikir 100% dalam hubungan objek yang memetakan langsung ke struktur tabel, dan sekarang sulit untuk melihat sesuatu yang berbeda. Saya dapat memahami beberapa manfaat dari Google Datastore (mis. Kinerja dan kemampuan untuk mendistribusikan data), tetapi beberapa fungsionalitas basis data yang baik dikorbankan (misalnya bergabung).
Apakah ada orang yang telah bekerja dengan Google Datastore atau BigTable memiliki saran bagus untuk bekerja bersama mereka?
Jawaban:
Ada dua hal utama yang harus dilakukan tentang datastore App Engine jika dibandingkan dengan database relasional 'tradisional':
Hal utama yang harus disadari - dan alasan di balik kedua perbedaan ini - adalah bahwa Bigtable pada dasarnya bertindak seperti kamus yang sangat teratur. Dengan demikian, operasi put hanya menetapkan nilai untuk kunci yang diberikan - terlepas dari nilai sebelumnya untuk kunci itu, dan operasi pengambilan terbatas untuk mengambil kunci tunggal atau rentang kunci yang berdekatan. Kueri yang lebih canggih dimungkinkan dengan indeks, yang pada dasarnya hanya tabel sendiri, memungkinkan Anda untuk menerapkan kueri yang lebih kompleks sebagai pemindaian pada rentang yang berdekatan.
Setelah Anda menyerapnya, Anda memiliki pengetahuan dasar yang diperlukan untuk memahami kemampuan dan keterbatasan datastore. Pembatasan yang mungkin tampak sewenang-wenang mungkin lebih masuk akal.
Kuncinya di sini adalah bahwa meskipun ini adalah pembatasan atas apa yang dapat Anda lakukan dalam basis data relasional, pembatasan yang sama inilah yang membuatnya praktis untuk meningkatkan skala yang dirancang untuk ditangani oleh Bigtable. Anda tidak bisa mengeksekusi semacam query yang terlihat bagus di atas kertas tetapi sangat lambat dalam database SQL.
Dalam hal bagaimana mengubah cara Anda merepresentasikan data, hal yang paling penting adalah perhitungan awal. Alih-alih melakukan penggabungan pada waktu kueri, prakalkulasi data dan simpan di datastore sedapat mungkin. Jika Anda ingin memilih catatan acak, buat angka acak dan simpan dengan setiap catatan.
Ada banyak buku resep dan kiat semacam ini di sini.Sunting: Buku masak tidak ada lagi.sumber
Cara saya telah beralih pikiran adalah untuk melupakan database sama sekali.
Dalam dunia db relasional Anda selalu harus khawatir tentang normalisasi data dan struktur tabel Anda. Parit semuanya. Cukup tata letak halaman web Anda. Letakkan semuanya. Sekarang lihat mereka. Anda sudah 2/3 di sana.
Jika Anda lupa gagasan bahwa ukuran basis data penting dan data tidak boleh diduplikasi maka Anda 3/4 di sana dan Anda bahkan tidak perlu menulis kode apa pun! Biarkan pandangan Anda menentukan Model Anda. Anda tidak harus mengambil objek dan membuatnya menjadi 2 dimensi lagi seperti di dunia relasional. Anda dapat menyimpan objek dengan bentuk sekarang.
Ya, ini adalah penjelasan sederhana tentang cobaan itu, tetapi ini membantu saya melupakan database dan hanya membuat aplikasi. Saya telah membuat 4 aplikasi App Engine sejauh ini menggunakan filosofi ini dan masih banyak lagi yang akan datang.
sumber
Saya selalu tertawa ketika orang keluar dengan - itu tidak berhubungan. Saya sudah menulis cellectr di Django dan ini adalah potongan dari model saya di bawah ini. Seperti yang akan Anda lihat, saya memiliki liga yang dikelola atau dilatih oleh pengguna. Saya bisa dari liga mendapatkan semua manajer, atau dari pengguna yang diberikan saya bisa mengembalikan liga yang dia latih atau manajer.
Hanya karena tidak ada dukungan kunci asing spesifik tidak berarti Anda tidak dapat memiliki model database dengan hubungan.
Dua pence saya.
sumber
Saya datang dari dunia Database Relasional lalu saya menemukan hal Datastore ini. butuh beberapa hari untuk menguasainya. nah ada beberapa temuan saya.
Anda pasti sudah tahu bahwa Datastore dibangun untuk skala dan itu adalah hal yang memisahkannya dari RDMBS. untuk skala yang lebih baik dengan dataset besar, App Engine telah melakukan beberapa perubahan (beberapa berarti banyak perubahan).
RDBMS VS
Struktur DataStore
Dalam database, kami biasanya menyusun data kami dalam Tabel, Baris yang di Datastore itu menjadi Jenis dan Entitas .
Hubungan
Dalam RDBMS, Sebagian besar orang mengikuti hubungan Satu-ke-Satu, Banyak-ke-Satu, Banyak-ke-Banyak, Di Datastore, Karena memiliki hal "Tidak Bergabung" tetapi masih dapat mencapai normalisasi dengan menggunakan " ReferenceProperty "Misalnya Contoh Hubungan Satu-ke-Satu .
Indeks
Biasanya di RDMBS kami membuat indeks seperti Primary Key, Foreign Key, Unique Key dan Index key untuk mempercepat pencarian dan meningkatkan kinerja basis data kami. Di datastore, Anda harus membuat setidaknya satu indeks per jenis (secara otomatis akan menghasilkan apakah Anda suka atau tidak) karena datastore mencari entitas Anda berdasarkan indeks ini dan percayalah itu adalah bagian terbaik, Di RDBMS Anda dapat mencari menggunakan bidang non-indeks meskipun akan memakan waktu tetapi akan. Di Datastore Anda tidak dapat mencari menggunakan properti non-indeks.
Hitung
Dalam RDMBS, jauh lebih mudah untuk menghitung (*) tetapi dalam datastore, Tolong jangan berpikir dengan cara normal (Ya ada fungsi hitung) karena memiliki 1000 Batas dan akan dikenakan biaya sebanyak operasi kecil sebagai entitas yang tidak bagus tapi kami selalu punya pilihan bagus, kami bisa menggunakan Shard Counters .
Kendala Unik
Di RDMBS, Kami menyukai fitur ini, kan? tetapi Datastore memiliki caranya sendiri. Anda tidak dapat mendefinisikan properti sebagai unik :(.
Permintaan
GAE Datatore menyediakan fitur yang lebih baik, banyak LIKE (Oh tidak! Datastore tidak memiliki kata kunci LIKE) SQL yang merupakan GQL .
Sisipan Data / Perbarui / Hapus / Pilih
Ini di mana kita semua tertarik, seperti dalam RDMBS kita memerlukan satu permintaan untuk Sisipkan, Perbarui, Hapus dan Pilih seperti RDBMS, Datastore telah meletakkan, menghapus, mendapatkan (jangan terlalu bersemangat) karena Datastore masukkan atau dapatkan dalam bentuk Tulis, Baca, Operasi Kecil ( Biaya Baca untuk Panggilan Datastore ) dan di situlah Pemodelan Data mulai berlaku. Anda harus meminimalkan operasi ini dan menjalankan aplikasi Anda. Untuk Mengurangi Operasi Baca Anda dapat menggunakan Memcache .
sumber
Lihatlah dokumentasi Objectify. Komentar pertama di bagian bawah halaman mengatakan:
"Bagus, walaupun kamu menulis ini untuk menggambarkan Objectify, itu juga salah satu penjelasan paling ringkas tentang databore appengine sendiri yang pernah kubaca. Terima kasih."
https://github.com/objectify/objectify/wiki/Concepts
sumber
Jika Anda terbiasa memikirkan entitas yang dipetakan ORM, maka pada dasarnya itulah cara kerja datastore berbasis entitas seperti Google App Engine. Untuk sesuatu seperti gabungan, Anda dapat melihat properti referensi . Anda tidak benar-benar perlu khawatir tentang apakah itu menggunakan BigTable untuk backend atau sesuatu yang lain karena backend diabstraksikan oleh antarmuka GQL dan Datastore API.
sumber
Cara saya melihat datastore adalah, jenis mengidentifikasi tabel, per se, dan entitas adalah baris individual dalam tabel. Jika Google mengambil jenis dari hanya satu meja besar tanpa struktur dan Anda dapat membuang apa pun yang Anda inginkan dalam suatu entitas. Dengan kata lain, jika entitas tidak terikat pada jenis yang cukup banyak Anda dapat memiliki struktur apa pun untuk entitas dan menyimpannya di satu lokasi (jenis file besar tanpa struktur untuk itu, setiap baris memiliki struktur sendiri).
Sekarang kembali ke komentar asli, google datastore dan bigtable adalah dua hal yang berbeda jadi jangan bingung google datastore dengan datastore sense penyimpanan data. Bigtable lebih mahal daripada bigquery (Alasan utama kami tidak melakukannya). Bigquery memang memiliki gabungan yang tepat dan RDBMS seperti bahasa sql dan lebih murah, mengapa tidak menggunakan bigquery. Yang sedang berkata, bigquery memang memiliki beberapa keterbatasan, tergantung pada ukuran data Anda, Anda mungkin atau mungkin tidak menemukannya.
Juga, dalam hal berpikir dalam hal datastore, saya pikir pernyataan yang tepat akan "berpikir dalam hal database NoSQL". Ada terlalu banyak dari mereka yang tersedia di luar sana hari ini tetapi ketika datang ke produk google kecuali google cloud SQL (yang merupakan mySQL) yang lainnya adalah NoSQL.
sumber
Berakar di dunia basis data, menyimpan data bagi saya akan menjadi tabel raksasa (karenanya nama "bigtable"). BigTable adalah contoh yang buruk karena ia melakukan banyak hal yang mungkin tidak dilakukan oleh database biasa, namun itu masih merupakan database. Kemungkinannya kecuali Anda tahu Anda perlu membuat sesuatu seperti "bigtable" Google, Anda mungkin akan baik-baik saja dengan database standar. Mereka membutuhkan itu karena mereka menangani jumlah data dan sistem yang gila secara bersamaan, dan tidak ada sistem yang tersedia secara komersial yang dapat melakukan pekerjaan dengan cara yang tepat seperti yang mereka dapat menunjukkan bahwa mereka membutuhkan pekerjaan yang harus dilakukan.
(referensi bigtable: http://en.wikipedia.org/wiki/BigTable )
sumber