CubicLouve

Spring_MTの技術ブログ

MySQLにおける外部キー作成時の自動インデックス生成

MySQLの外部キー制約において、外部キーと参照キーにはインデックスが必要です。 下記はMySQL 8.0のドキュメントですが、5.7でも同じような内容となっています。 dev.mysql.com 参照元のテーブルには、外部キーのカラムが同じ順序で最初のカラムとしてならぶ…

ActiveRecordのcallbackの実装を調べたときのメモ

Railsのcallbackの実体 callbackはActiveSupport::Callbacksを使って定義されます。 github.com ActiveRecordのcallback ActiveRecord::Callbacksに定義があります。 github.com ここでcreateなどが定義されます。 github.com define_model_callbacksは下記…

Railsのrspecのrequest specについて

rspec.info 上記の記事にあるように、Rails 5以降ではrails-controller-testing gemをアプリケーションに追加することは推奨されておらず、RSpecコアチームはrequest specsを書くことを推奨しています。 その理由として、request specでは、単一のcontroller…

線形合同法(Linear congruential method)のスペクトル検定による可視化

線形合同法は擬似乱数生成器の一つ ここでのA(乗数) C(増分) M(法)は定数で、AとCはMより小さい数を選ぶ。 このA C Mの選び方によって周期性は変わる。 どういう選び方すればをいいかは下記本を参照ください。 線形合同法で生成された数列がどれくらい乱雑か…

バイナリファイルを見る方法

白く塗りつぶしたpngファイルの例でやってみる。 % convert -size 128x128 xc:white white.png vimを使う場合 vim -b white.png でバイナリモードでvimで開いた後に下記コマンドでバイナリダンプします。 :%!xxd 00000000: 8950 4e47 0d0a 1a0a 0000 000d 49…

lsofの使い方まとめてみた

github.com lsof コマンドはプロセスがオープンしているファイルの一覧を表示します。 manには下記のように記載されている。 lsof - list open files ファイルはディスク上のファイルだけでなく、ネットワークソケット、デバイスなども含まれるため、オープ…

create-clusterコマンドを使ってローカルでredis clusterを簡単に作成する方法

redis の中に 含まれている create-cluster コマンドを使うと、Redis Clusterを簡単にローカルで立てることができたのでそのメモ。 手順 redisをcloneしてくる git clone git@github.com:redis/redis.git cd redis redisをビルドする make 自分の環境ではmac…

デカフェの生茶は普通の生茶より美味しい

生茶にはデカフェ版があるのですが、これ普通の生茶より美味しい気がしているんですよね。 お茶の旨味はしっかりと残っているんだけど、渋みが減っていてすっきり飲みやすい。 夏におすすめの一品です。 店頭で並んでいることがほとんどないので、流行ったら…

物理クロック 論理クロック

物理クロック ほぼすべてのコンピューターには、内蔵されている水晶発振器によって時刻を計算しています。 水晶は安定した周波数の電気信号を発振するため、振動子として広く使われています。 パソコンの電源が切れたり、充電が切れたりしても、マザーボード…

Tail Latencyについて

research.google この論文では、大規模な分散システムでは、まれなパフォーマンスの低下であっても、全リクエストのかなりの部分に影響を与えるとあります。 つまり大規模な分散システムではテールレイテンシの影響が大きくなります。 テールレイテンシは大…

証明書と認証局の確認

まずは証明書周りについての整理 証明書 証明書は電子文書。 ja.wikipedia.org 証明書の中には、公開鍵やそれに紐づく情報と証明書の発行元のデジタル署名が含まれています。 現在の公開鍵基盤として広く使われているX.509では、証明書の構造は ASN.1 という…

MacでMirageOSを動かしてみる

OCamlと仮想化の勉強のためMirageOSを触ってみることにしました。 setup mirage.io 通りにやってみる brew install opam opam init opam install mirage Hello World mirage.io git clone https://github.com/mirage/mirage-skeleton.git noopをやってみる %…

データベースシステム 改訂2版の数式でわからなかったところメモ

p 37 p 39 p 37 集合は波括弧 {...} を用いて集合の要素を明示的に列挙する。 一般に、条件 P(x) があったとき、それをみたす対象だけを全て集めた集合を、 と表記する。 a ∈ Aは aはAに属している、aはAの要素である。 ∧ は論理積、AND A ∧ Bは、Aであり、…

継続的デリバリー(Continuous Delivery, CD)について

継続的デリバリー(CD)とはなにか? 根本は アジャイル宣言の背後にある原則 になるかと思います。 顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。 Our highest priority is to satisfy the customer through early and continuous d…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その4の補足資料)

MySQLは8.0.19を使っています。 LSN LSNとは Log Sequence Number の略で、単調増加する値で、redoログに書き込まれたバイト数分だけLSNが増えます。 dev.mysql.com MySQLでは SHOW ENGINE INNODB STATUS でLSNを確認できます。 --- LOG --- Log sequence nu…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesのまとめ

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases の翻訳まとめページ https://www.allthingsdistributed.com/files/p1041-verbitski.pdf 翻訳内容 spring-mt.hatenablog.com spring-mt.hatenablog.com spring-…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その9 CONCLUSION)

9 CONCLUSION Auroraは,クラウドの環境で、可用性も耐久性も妥協しない、高スループットのOLTPデータベースとして設計した。 この大きなアイデアは、伝統的なデータベースのモノリシックなアーキテクチャからの脱却と、ストレージをコンピュートの分離であ…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その7 LESSONS LEARNED)

7 LESSONS LEARNED ここでは、クラウドで一般的なシナリオとそれに求める期待にフォーカスして、新たな方向性を導き出す。 7.1 マルチテナンシーとデータベースの統合 AWSのユーザーの多くは、SaaSビジネスを展開している。 SaaSでは、一般的にschema/databa…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その6 PERFORMANCE RESULTS)

6 PERFORMANCE RESULTS 2015年7月にGAとなったAuroraを本番環境で稼働させた際の経験を紹介する。 6.1 標準的なベンチマークでの結果 SysBenchやTPC-C 亜種などの業界標準のベンチマークを用いて、AuroraとMySQLの性能を比較する。 特に記載のない限り、32 v…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その5 PUTTING IT ALL TOGETHER)

5 PUTTING IT ALL TOGETHER ここでは、Figure 5で示すAuroraの構成要素について説明する。 https://www.allthingsdistributed.com/files/p1041-verbitski.pdf 参照 データベースエンジンは "community" MySQL/InnoDBのフォークであり,主にInnoDBがどのよう…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その4 THE LOG MARCHES FORWARD)

4 THE LOG MARCHES FORWARD ここでは、永続状態、実行状態、レプリカ状態で常に一貫しているように、データベースエンジンからどのようにログが生成されるかを説明する。(3つの状態があるってことか) 特に、コストが高い2PC(2 phase commit)のプロトコルを使…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その3 ログ is データベース)

3. THE LOG IS THE DATABASE Auroraはセクション2で紹介したように、セグメントに分けられて複製されているストレージシステムになっている。 このようなストレージシステムを使って従来のデータベースを動かすと、ネットワークI/O、同期のストール(失速)の…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その2 大規模における耐久性)

2 DURABILITY AT SCALE(大規模における耐久性) データベースとは一度書き込んだら読み込みができなければならないのですが、全てのシステムはそうはなっていない。 ここでは、クォーラムのモデルの背後にある理論的根拠を示す。 なぜストレージを分けるのか…

MySQL InnoDBにおけるPKにUUIDを使ったINSERTのパフォーマンスの調査

下記の記事を見て、PKにUUIDを使った際に内部的にどうなっているのかを確認してみました kccoder.com 比較対象として、PKにULIDを使った場合も調べてみました。 github.com ULIDはUUIDと互換性がある、ソート可能な識別子です。 MySQLのバージョン % mysql -…

Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databasesを読む(その1 Introduction)

論文はこちらです。 https://www.allthingsdistributed.com/files/p1041-verbitski.pdf Introduction 最近の分散型クラウドサービスでは、下記2つを実現することで回復力とスケーラビリティを実現するケースが増えている。 コンピュートをストレージから分離…

なぜUsersテーブルの行でロックを取るのか?

下記ツイートを見て改めて考えてみました。 更新系APIでDBトランザクション張る時、対象のリソース群の親となるリソース(大抵はUser)を無条件で最初にロックする手法が当たり前だと思っていたけど、もしかして世間ではそうではないのかな...デッドロックリ…

Java SDKでApache Beam(Dataflow)でGradleを使うサンプル

Java SDKを使ったApache Beamのパイプライン構築については公式ドキュメントなどを見るとMavenを使うことが多いのですが、Gradleを使った例が見当たらなかったので作ってみました。 github.com 個人的な感想なのですが、Mavenだと依存関係をpomで定義書くの…

Apache BeamでPTransformを使って分割したステップについてテストをする(Java)

簡単なまとめ Apache Beamでは PTransform PCollectionを使ってパイプラインを小さいステップに分割できる Apache Beamは分割してステップを簡単にテストできるテスティングフレームワークが整備されている パイプラインを細かく分割して、それらのテストを…

サービスを作る

雑多にまとめておく MVPとかPocとか InVisionやFigmaで作る。 それで、プロダクトのコアコンセプトのテスト、仮説検証できるところまでやる。 最初の文化 なぜこのサービスをやるのかを最初からチームで話す www.ryuzee.com blog.agile.esm.co.jp すべてのタ…

docker build時のキャッシュの判定

メモ書き スタートはdispatchersから https://github.com/moby/moby/blob/cf0ce96eb129ebcc7d07f0f47a8683c16f228c7d/builder/dockerfile/dispatchers.go ADD や COPY https://github.com/moby/moby/blob/cf0ce96eb129ebcc7d07f0f47a8683c16f228c7d/builder/…