Yoshi.dev

技術系の趣味、またはやった仕事やそこから学んだことを忘れないために

技術日記5/7-5/10

protocol buffersのversion3でrequired, optionalがなくなっていることを知った

そのため定義してあるフィールドには必ず値が入るようにしなければならない

とはいえoptionalを表現したいときはある

自分は別フィールドで has_~ といった感じで表現することにした

.protoファイル例

message Sample {
    bool has_hoge = 1;
    string hoge = 2;
}

そもそもなんでrequiredがなくなったのかというと
requiredを使うと過去互換を取りにくくなるからとのことだった
最初に設計したときは必須だと思っていても、将来的にそのフィールドが必須であり続ける保証はない
でも、一度requiredにしてしまうと後から削除するのは難しいからとのこと
ふむ、わかるようなわからないような

今更だけど排他ロックと共有ロックのちがいを理解した
簡単に言うと読み取り(SELECT)を許すかの違い 排他ロックではUPDATE、DELETE、SELECTができない
共有ロックならSELECTは通る
SELECT~FOR UPDATEは排他ロック
この文は取得した値を利用して更新をかける際に使われることを想定している

クリーンアーキテクチャでのDBトランザクションどうするか問題にハマっている

blockchainゼミに入ったからblockchainの記事を漁っていた
blockchainの将来性が大変気になる
本当にこの技術は将来使われるのかとか
でも既にblockchainを使用したサービスはいくつも誕生しているみたい
例えばYouTubeのような動画配信サービスのDtube
ただこれらのサービスが既存のサービスからシェアを奪う未来はくるのだろうか
blockchainを使ってうまくクリエイターに還元する流れができると良さそうだけど、その還元金額が既存のサービスを上回るような設計が必要そう

もっとアーキテクチャのこと勉強したいから下記の書籍を購入した

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計