ある本を読んで知ったんだけど、「シリアライズ」という言葉には2つの意味があるらしい。
それについてメモ。
1.シリアライズ → 直列化
データベースで「シリアライズ」と言うと、大抵はこちらを指すと思うんだけど
例えば
const hoge= { 0:"yamada", 1:"suzuki", 2:"yamamoto" }
というオブジェクトがあったとする。
この変数hogeの中身をそのままデータベースに保存したいとする。
でもデータベースは「オブジェクト」という概念が理解できない。なのでそのまま保存できない。
(正確にいうとMySQLとかは5.7からJSONをそのまま保存できるようになったりしてるらしいけど・・・)
こういうときに、このオブジェクトをシリアライズすると
”オブジェクト”から”文字列”に変換することができる。
(以下のgifを見てもらうと分かりやすいと思います。)
このように、シリアライズすることで”ただの文字列”に変換できるので、普通にデータベースに保存できるようになる。
デシリアライズすれば、再度オブジェクトとしても使える。
2.シリアライズ → 逐次化
こちらが知らなかったほう。
すごくザックリ言うと、「1つのリソースに同時アクセスさせないように順番を決めてアクセスさせること」を逐次化と呼ぶらしい。
例えば以下のような感じ。(Node.jsのソースです)
const sqlite3 = require('sqlite3'); const db = new sqlite3.Database('mydb.sqlite3'); db.serialize(() => {//ここから逐次化の処理 //ここに書いた処理は順番に処理される });
このソースの場合、SQLiteなデータベースにアクセスする際に逐次化が行われている。
おそらくだけど、SQLiteは「1つのファイル」をデータベースと言ってアクセスしているだけなので、同時にアクセスされると困るよね―ってことで逐次化するんじゃなかろうか。
逆に、MySQLやPostgressのような「逐次化でアクセスするのが当たり前だよね」みたいなきっちりしたデータベースでは、逐次化の処理は書く必要が必要ないのではなかろうか。
まとめ
よくよく考えるとどちらも微妙に意味が似ている。
どちらも「前にならえ!!」をさせていると考えると分かりやすい。
- 直列化の方は、オブジェクトに対して「前にならえ!!」と命令してデータを1列に並ばせている。
- 逐次化の方は、アクセスしてこようとするSQL文に対して「前にならえ!!」と命令してSQL文たちを1列に並ばせている。
おわり
コメント