Saya tidak dapat memahami apa kunci utama Range di sini -
dan bagaimana cara kerjanya?
Apa yang mereka maksud dengan "indeks hash yang tidak berurutan pada atribut hash dan indeks rentang yang diurutkan pada atribut rentang"?
Saya tidak dapat memahami apa kunci utama Range di sini -
dan bagaimana cara kerjanya?
Apa yang mereka maksud dengan "indeks hash yang tidak berurutan pada atribut hash dan indeks rentang yang diurutkan pada atribut rentang"?
Jawaban:
" Hash dan Range Primary Key " berarti bahwa satu baris dalam DynamoDB memiliki kunci primer unik yang terdiri dari hash dan kunci range . Misalnya dengan kunci hash X dan kunci rentang Y , kunci utama Anda secara efektif XY . Anda juga dapat memiliki beberapa tombol rentang untuk kunci hash yang sama tetapi kombinasinya harus unik, seperti XZ dan XA . Mari kita gunakan contoh mereka untuk setiap jenis tabel:
Kunci Utama Hash - Kunci utama terbuat dari satu atribut, atribut hash. Misalnya, tabel ProductCatalog dapat memiliki ProductID sebagai kunci utamanya. DynamoDB membangun indeks hash yang tidak teratur pada atribut primary key ini.
Ini berarti bahwa setiap baris tidak memiliki nilai ini. Setiap baris dalam DynamoDB akan memiliki nilai unik yang diperlukan untuk atribut ini . Indeks hash yang tidak berurutan berarti apa yang dikatakan - data tidak dipesan dan Anda tidak diberi jaminan apa pun tentang bagaimana data disimpan. Anda tidak akan dapat membuat query pada indeks unordered seperti Dapatkan saya semua baris yang memiliki lebih ProductID dari X . Anda menulis dan mengambil item berdasarkan kunci hash. Misalnya, Dapatkan saya baris dari yang tabel yang memiliki ProductID X . Anda membuat kueri terhadap indeks tidak berurutan sehingga Anda menentangnya pada dasarnya adalah pencarian nilai kunci, sangat cepat, dan menggunakan sangat sedikit throughput.
Kunci Utama Hash dan Rentang - Kunci utama terbuat dari dua atribut. Atribut pertama adalah atribut hash dan atribut kedua adalah atribut rentang. Misalnya, tabel Thread forum dapat memiliki ForumName dan Subjek sebagai kunci utamanya, di mana ForumName adalah atribut hash dan Subjek adalah atribut range. DynamoDB membangun indeks hash yang tidak berurutan pada atribut hash dan indeks rentang yang diurutkan pada atribut rentang.
Ini berarti bahwa kunci utama setiap baris adalah kombinasi dari hash dan kunci rentang . Anda bisa membuat langsung mendapat di baris tunggal jika Anda memiliki kunci hash dan rentang, atau Anda dapat membuat kueri terhadap indeks rentang yang diurutkan . Misalnya, dapatkan Dapatkan saya semua baris dari tabel dengan kunci H X yang memiliki tombol rentang lebih besar dari Y , atau kueri lain yang memengaruhi itu. Mereka memiliki kinerja yang lebih baik dan penggunaan kapasitas yang lebih sedikit dibandingkan dengan Pemindaian dan Permintaan terhadap bidang yang tidak diindeks. Dari dokumentasi mereka :
Hasil kueri selalu diurutkan berdasarkan tombol rentang. Jika tipe data dari tombol rentang adalah Angka, hasilnya dikembalikan dalam urutan numerik; jika tidak, hasilnya dikembalikan dalam urutan nilai kode karakter ASCII. Secara default, urutan pengurutan naik. Untuk membalikkan urutan, atur parameter ScanIndexForward ke false
Saya mungkin melewatkan beberapa hal saat saya mengetik ini dan saya hanya menggaruk permukaan. Ada banyak lebih aspek untuk mempertimbangkan ketika bekerja dengan DynamoDB tabel (throughput, konsistensi, kapasitas, indeks lainnya, distribusi kunci, dll). Anda harus melihat contoh tabel dan halaman data untuk contoh.
Ketika semuanya bercampur, mari kita lihat fungsi dan kode untuk mensimulasikan apa artinya secara konsisten
Satu- satunya cara untuk mendapatkan baris adalah melalui kunci primer
getRow(pk: PrimaryKey): Row
Struktur data kunci utama dapat berupa ini:
// If you decide your primary key is just the partition key.
class PrimaryKey(partitionKey: String)
// and in thids case
getRow(somePartitionKey): Row
Namun Anda dapat memutuskan kunci utama Anda adalah kunci partisi + kunci sortir dalam kasus ini:
// if you decide your primary key is partition key + sort key
class PrimaryKey(partitionKey: String, sortKey: String)
getRow(partitionKey, sortKey): Row
getMultipleRows(partitionKey): Row[]
Jadi intinya:
Memutuskan bahwa kunci utama Anda hanya kunci partisi? dapatkan satu baris dengan kunci partisi.
Memutuskan bahwa kunci utama Anda adalah kunci partisi + kunci sortir? 2.1 Dapatkan baris tunggal dengan (kunci partisi, kunci sortir) atau dapatkan rentang baris dengan (kunci partisi)
Dengan cara apa pun Anda mendapatkan satu baris dengan kunci primer satu-satunya pertanyaan adalah apakah Anda menetapkan kunci primer hanya untuk kunci partisi atau kunci partisi + tombol sortir
Blok bangunan adalah:
Pikirkan Item sebagai baris dan atribut KV sebagai sel di baris itu.
Anda dapat melakukan (2) hanya jika Anda memutuskan bahwa PK Anda terdiri dari (HashKey, SortKey).
Lebih visual sebagai kompleksnya, cara saya melihatnya:
+----------------------------------------------------------------------------------+
|Table |
|+------------------------------------------------------------------------------+ |
||Item | |
||+-----------+ +-----------+ +-----------+ +-----------+ | |
|||primaryKey | |kv attr | |kv attr ...| |kv attr ...| | |
||+-----------+ +-----------+ +-----------+ +-----------+ | |
|+------------------------------------------------------------------------------+ |
|+------------------------------------------------------------------------------+ |
||Item | |
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | |
|||primaryKey | |kv attr | |kv attr ...| |kv attr ...| |kv attr ...| | |
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | |
|+------------------------------------------------------------------------------+ |
| |
+----------------------------------------------------------------------------------+
+----------------------------------------------------------------------------------+
|1. Always get item by PrimaryKey |
|2. PK is (Hash,RangeKey), great get MULTIPLE Items by Hash, filter/sort by range |
|3. PK is HashKey: just get a SINGLE ITEM by hashKey |
| +--------------------------+|
| +---------------+ |getByPK => getBy(1 ||
| +-----------+ +>|(HashKey,Range)|--->|hashKey, > < or startWith ||
| +->|Composite |-+ +---------------+ |of rangeKeys) ||
| | +-----------+ +--------------------------+|
|+-----------+ | |
||PrimaryKey |-+ |
|+-----------+ | +--------------------------+|
| | +-----------+ +---------------+ |getByPK => get by specific||
| +->|HashType |-->|get one item |--->|hashKey ||
| +-----------+ +---------------+ | ||
| +--------------------------+|
+----------------------------------------------------------------------------------+
Jadi apa yang terjadi di atas. Perhatikan pengamatan berikut. Seperti yang kami katakan, data kami adalah milik (Tabel, Item, KVAttribute). Kemudian Setiap Item memiliki kunci utama. Sekarang cara Anda menyusun kunci utama bermakna dalam cara Anda dapat mengakses data.
Jika Anda memutuskan bahwa PrimaryKey Anda hanyalah kunci hash maka hebat Anda bisa mendapatkan satu item dari itu. Namun jika Anda memutuskan bahwa kunci utama Anda adalah hashKey + SortKey maka Anda juga bisa melakukan kueri rentang pada kunci utama Anda karena Anda akan mendapatkan item Anda dengan (HashKey + SomeRangeFunction (pada tombol rentang)). Jadi Anda bisa mendapatkan banyak item dengan kueri kunci utama Anda.
Catatan: Saya tidak merujuk ke indeks sekunder.
Jawaban yang sudah dijelaskan dengan baik sudah diberikan oleh @mkobit, tapi saya akan menambahkan gambar besar dari tombol rentang dan kunci hash.
Dengan kata sederhana range + hash key = composite primary key
CoreComponents of Dynamodb
Kunci utama terdiri dari kunci hash dan kunci rentang opsional. Kunci hash digunakan untuk memilih partisi DynamoDB. Partisi adalah bagian dari data tabel. Tombol rentang digunakan untuk mengurutkan item di partisi, jika ada.
Jadi keduanya memiliki tujuan yang berbeda dan bersama-sama membantu melakukan kueri yang kompleks. Pada contoh di atas Contoh hashkey1 can have multiple n-range.
lain dari range dan hashkey adalah game, userA (hashkey)
dapat memainkan Ngame(range)
Tabel Musik yang dijelaskan dalam Tabel, Item, dan Atribut adalah contoh tabel dengan kunci primer gabungan (Artis dan SongTitle). Anda dapat mengakses item apa saja di tabel Musik secara langsung, jika Anda memberikan nilai Artis dan SongTitle untuk item itu.
Kunci primer komposit memberi Anda fleksibilitas tambahan saat meminta data. Misalnya, jika Anda hanya memberikan nilai untuk Artis, DynamoDB mengambil semua lagu oleh artis itu. Untuk hanya mengambil subset lagu dari artis tertentu, Anda dapat memberikan nilai untuk Artis bersama dengan sejumlah nilai untuk SongTitle.
https://www.slideshare.net/InfoQ/amazon-dynamodb-design-patterns-best-practices https://www.slideshare.net/AmazonWebServices/awsome-day-2016-module-4-databases-amazon-dynamodb -and-amazon-rds https://ceyhunozgun.blogspot.com/2017/04/implementing-object-persistence-with-dynamodb.html
Music
tabel, seorang artis tidak dapat menghasilkan dua lagu dengan judul yang sama, tetapi mengejutkan - dalam permainan video kami memiliki Doom dari tahun 1993 dan Doom dari 2016 en.wikipedia.org/wiki/Doom_(franchise) dengan "artis" yang sama ( pengembang): id Software
.
@ vnr Anda dapat mengambil semua kunci sortir yang terkait dengan kunci partisi dengan hanya menggunakan kueri menggunakan kunci partion. Tidak perlu dipindai. Intinya di sini adalah kunci partisi wajib dalam kueri. Sortir kunci hanya digunakan untuk mendapatkan rentang data