Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Desain skema jejaring sosial di DynamoDB
Kasus penggunaan bisnis jejaring sosial
Kasus penggunaan ini membahas penggunaan DynamoDB sebagai jejaring sosial. Jejaring sosial adalah layanan online yang memungkinkan berbagai pengguna berinteraksi satu sama lain. Jejaring sosial yang akan kita desain akan memungkinkan pengguna melihat garis waktu yang terdiri dari postingan mereka, pengikut mereka, orang yang mereka ikuti, dan postingan yang ditulis oleh orang yang mereka ikuti. Pola akses untuk desain skema ini adalah:
-
Mendapatkan informasi pengguna untuk userID tertentu
-
Mendapatkan daftar pengikut untuk userID tertentu
-
Mendapatkan daftar orang yang diikuti untuk userID tertentu
-
Mendapatkan daftar postingan untuk userID tertentu
-
Mendapatkan daftar pengguna yang menyukai postingan untuk postID tertentu
-
Mendapatkan jumlah suka untuk postID tertentu
-
Mendapatkan lini masa untuk userID tertentu
Diagram hubungan entitas jejaring sosial
Ini adalah diagram hubungan entitas (ERD) yang akan kita gunakan untuk desain skema jejaring sosial.
Pola akses jejaring sosial
Ini adalah pola akses yang akan kita pertimbangkan untuk desain skema jaringan sosial.
-
getUserInfoByUserID
-
getFollowerListByUserID
-
getFollowingListByUserID
-
getPostListByUserID
-
getUserLikesByPostID
-
getLikeCountByPostID
-
getTimelineByUserID
Evolusi desain skema jejaring sosial
DynamoDB adalah database SQL No, sehingga tidak memungkinkan Anda untuk melakukan join - operasi yang menggabungkan data dari beberapa database. Pelanggan yang tidak terbiasa dengan DynamoDB mungkin menerapkan filosofi desain sistem manajemen basis data relasional RDBMS (seperti membuat tabel untuk setiap entitas) ke DynamoDB ketika mereka tidak perlu melakukannya. Tujuan desain tabel tunggal DynamoDB adalah untuk menulis data dalam bentuk pra-penggabungan sesuai pola akses aplikasi, lalu segera menggunakan data tanpa komputasi tambahan. Untuk informasi selengkapnya, lihat Single-table vs. multi-table design in DynamoDB
Sekarang, mari melanjutkan ke cara mengembangkan desain skema untuk menangani semua pola akses.
Langkah 1: Tangani pola akses 1 (getUserInfoByUserID
)
Untuk mendapatkan informasi pengguna tertentu, kita perlu Query
tabel dasar dengan kondisi kunci PK=<userID>
. Operasi kueri memungkinkan Anda melakukan paginasi hasil, yang berguna ketika pengguna memiliki banyak pengikut. Untuk informasi selengkapnya tentang Kueri, lihat Menanyakan tabel di DynamoDB.
Dalam contoh, kita melacak dua jenis data untuk pengguna: yaitu "count" dan "info". "Count" pengguna mencerminkan berapa banyak pengikut yang dimiliki, berapa banyak pengguna yang diikuti, dan berapa banyak postingan yang telah dibuat. "Info" pengguna mencerminkan informasi pribadi seperti nama mereka.
Kita melihat dua jenis data yang diwakili oleh dua item di bawah ini. Item dengan "count" dalam kunci urutan (SK) lebih mungkin berubah daripada item dengan "info". DynamoDB menganggap ukuran item seperti yang muncul sebelum dan setelah pembaruan dan throughput yang disediakan akan mencerminkan ukuran item yang lebih besar. Meskipun Anda hanya memperbarui subset atribut item, UpdateItem
masih akan menggunakan throughput yang disediakan dalam jumlah penuh (lebih besar dari ukuran item sebelum dan sesudah). Anda bisa mendapatkan item melalui satu operasi Query
dan menggunakan UpdateItem
untuk menambah atau mengurangi dari atribut numerik yang ada.
Langkah 2: Tangani pola akses 2 (getFollowerListByUserID
)
Untuk mendapatkan daftar pengguna yang mengikuti pengguna tertentu, kita perlu melakukan Query
tabel dasar dengan kondisi kunci PK=<userID>#follower
.
Langkah 3: Tangani pola akses 3 (getFollowingListByUserID
)
Untuk mendapatkan daftar pengguna yang diikuti pengguna tertentu, kita perlu melakukan Query
tabel dasar dengan kondisi kunci PK=<userID>#following
. Anda kemudian dapat menggunakan TransactWriteItems
operasi untuk mengelompokkan beberapa permintaan bersama-sama dan melakukan hal berikut:
-
Tambahkan Pengguna A ke daftar pengikut Pengguna B, lalu tambahkan jumlah pengikut Pengguna B satu per satu.
-
Tambahkan Pengguna B ke daftar pengikut Pengguna A, lalu tambahkan jumlah pengikut Pengguna A satu per satu.
Langkah 4: Tangani pola akses 4 (getPostListByUserID
)
Untuk mendapatkan daftar postingan yang dibuat pengguna tertentu, kita perlu melakukan Query
tabel dasar dengan kondisi kunci PK=<userID>#post
. Satu hal penting yang perlu diperhatikan di sini adalah bahwa pengguna postIDs harus inkremental: nilai PostID kedua harus lebih besar dari nilai PostID pertama (karena pengguna ingin melihat posting mereka dengan cara yang diurutkan). Anda dapat melakukan ini dengan menghasilkan postIDs berdasarkan nilai waktu seperti Universally Unique Lexicographically Sortable Identifier (). ULID
Langkah 5: Tangani pola akses 5 (getUserLikesByPostID
)
Untuk mendapatkan daftar pengguna yang menyukai postingan pengguna tertentu, kita perlu melakukan Query
tabel dasar dengan kondisi kunci PK=<postID>#likelist
. Pendekatan ini sama dengan pola yang kita gunakan untuk mengambil daftar pengikut dan pengguna yang diikuti dalam pola akses 2 (getFollowerListByUserID
) dan pola akses 3 (getFollowingListByUserID
).
Langkah 6: Tangani pola akses 6 (getLikeCountByPostID
)
Untuk mendapatkan jumlah suka dalam posting tertentu, kita harus melakukan GetItem
operasi pada tabel dasar dengan kondisi kunci PK=<postID>#likecount
. Pola akses ini dapat menyebabkan masalah pembatasan setiap kali pengguna dengan banyak pengikut (seperti selebriti) membuat posting karena throttling terjadi ketika throughput partisi melebihi 1000 per detik. WCU Masalah ini tidak dihasilkan oleh DynamoDB, tetapi hanya muncul di DynamoDB karena berada di akhir tumpukan perangkat lunak.
Anda harus mengevaluasi apakah penting bahwa semua pengguna melihat jumlah suka secara bersamaan atau hal tersebut dapat dilakukan secara bertahap dari waktu ke waktu. Secara umum, jumlah suka postingan tidak harus langsung 100% akurat. Anda dapat menerapkan strategi ini dengan menempatkan antrean antara aplikasi Anda dan DynamoDB agar pembaruan terjadi secara berkala.
Langkah 7: Tangani pola akses 7 (getTimelineByUserID
)
Untuk mendapatkan lini masa pengguna tertentu, kita harus melakukan Query
operasi pada tabel dasar dengan kondisi kunci PK=<userID>#timeline
. Mari pertimbangkan skenario ketika pengikut pengguna perlu melihat postingan secara sinkron. Setiap kali pengguna menulis postingan, daftar pengikut mereka dibaca dan userID serta postID mereka perlahan dimasukkan ke dalam kunci lini masa semua pengikutnya. Kemudian, ketika aplikasi Anda dimulai, Anda dapat membaca kunci lini masa dengan operasi Query
dan mengisi layar lini masa dengan kombinasi userID dan postID menggunakan operasi BatchGetItem
untuk semua item baru. Anda tidak dapat membaca timeline dengan API panggilan, tetapi ini adalah solusi yang lebih hemat biaya jika posting dapat sering diedit.
Lini masa adalah tempat yang menampilkan postingan terbaru, jadi kita perlu cara untuk membersihkan yang lama. Alih-alih menggunakan WCU untuk menghapusnya, Anda dapat menggunakan TTLfitur DynamoDB untuk melakukannya secara gratis.
Semua pola akses dan bagaimana desain skema mengatasinya dirangkum dalam tabel di bawah ini:
Pola akses | Tabel dasar//GSILSI | Operasi | Nilai kunci partisi | Nilai kunci urutan | Kondisi/filter lainnya |
---|---|---|---|---|---|
getUserInfoByUserID | Tabel dasar | Kueri | PK=<userID> | ||
getFollowerListByUserID | Tabel dasar | Kueri | PK=<userID>#follower | ||
getFollowingListByUserID | Tabel dasar | Kueri | PK=<userID>#following | ||
getPostListByUserID | Tabel dasar | Kueri | PK=<userID>#post | ||
getUserLikesByPostID | Tabel dasar | Kueri | PK=<postID>#likelist | ||
getLikeCountByPostID | Tabel dasar | GetItem | PK=<postID>#likecount | ||
getTimelineByUserID | Tabel dasar | Kueri | PK=<userID>#timeline |
Skema akhir jejaring sosial
Berikut adalah desain skema akhir. Untuk mengunduh desain skema ini sebagai JSON file, lihat Contoh DynamoDB
Tabel dasar:
Menggunakan No SQL Workbench dengan desain skema ini
Anda dapat mengimpor skema akhir ini ke No SQL Workbench, alat visual yang menyediakan pemodelan data, visualisasi data, dan fitur pengembangan kueri untuk DynamoDB, untuk mengeksplorasi lebih lanjut dan mengedit proyek baru Anda. Ikuti langkah-langkah berikut untuk memulai:
-
Unduh No SQL Workbench. Untuk informasi selengkapnya, lihat Unduh No SQL Workbench untuk DynamoDB.
-
Unduh file JSON skema yang tercantum di atas, yang sudah dalam format model No SQL Workbench.
-
Impor file JSON skema ke No SQL Workbench. Untuk informasi selengkapnya, lihat Mengimpor model data yang ada.
-
Setelah Anda mengimpor ke NOSQL Workbench, Anda dapat mengedit model data. Untuk informasi selengkapnya, lihat Mengedit model data yang ada.
-
Untuk memvisualisasikan model data Anda, menambahkan data sampel, atau mengimpor data sampel dari CSV file, gunakan fitur Visualizer Data dari No Workbench. SQL