一年を振り返る Advent Calendar 2024の24日目です。もう少し頑張る。短い記事を淡々と。
これまでずっとOracleのRDBMSしか触ったことなかった人間ですが、人生で初めてNoSQLに触れてみて設計思想とか全然違ったのでメモ。
NoSQLの中で具体的に触ったのがDynamoDBでキーバリューDBに触れたので、その知見ベースの記事なります。
とりあえず最初に見たのはAWSさんのこの動画です。2年前の動画ですが、個人的には入りとしてめちゃくちゃわかりやすかった。
今から理解する NoSQL Databases〜 ケーススタディと実践的データモデリング 〜(AWS-44)
とりあえず思ったことを3つほどメモ。
JOINがない
最初にまじかよと思いましたが、NoSQLでは基本的にJOINの機能が提供されないみたいです。なのでアプリケーション側で吸収してあげたり、そもそもテーブル設計のタイミングでちゃんと考えておかないといけないなぁ、というのが学びでした。
https://zenn.dev/ryokkkke/scraps/c13d07ab1e8b09
この記事のコメントにある以下の内容が自分もとてもしっくりきました。
- つまり、RDBは実行時に join するが、 NoSQL では設計時に join する、というイメージ。
データのとり方もうちょい理解するにあたってGSIとかLSIとかセカンダリインデックスもうちょいちゃんと理解しないとなぁと。
テーブル設計は非正規化していく
上記に関連するところもありますが、DB設計するにあたってテーブルを非正規化していくという今までなかった行為をしないといけないのが新鮮でした。
テーブル設計の考え方、この記事が色々わかりやすく書いてくれてるなと思いました。
やっぱテーブル設計って大事だなぁと思いました。こういうの上手に設計できるように勉強していきたい。
排他制御が緩い
特性上一貫性を捨てて並列処理しやすいようにしているからだと思いますが、排他制御もアプリケーション側でゴリゴリ設計していかないといけないなぁという印象を持ちました。というか、ACID特性重視するのであればNoSQL使うべきじゃないんやろうなという印象です。
まとめ
データベースも用途によって使い分けできるよう知見広げていきたいです。頑張って勉強していきます。