本記事は Google Cloud Platform その2 Advent Calendar 2018 の4日目の記事です。 はじめにCloud Spanner はトランザクションの一貫性保証のレベルに External Consistency を採用しており、複数のトランザクションが一貫性のある状態で並行に走れるよう制御されています。 ではその一貫性保証とは、具体的にどのような問題 (Anomaly) を防いでくれるのでしょうか。 本記事では、一貫性保証のレベルが弱い時に起こりうる以下の様々な Anomaly を Cloud Spanner ではどのように防いでくれるか、実際に複数のトランザクションを実行して検証していきたいと思います。 Dirty ReadLost UpdateNon-repeatable ReadPhantom ReadRead SkewWrite Skewこれらの
この記事はMERPAY TECH OPENNESS MONTHの16日目の記事です。 メルペイ エキスパートチームの@tenntennです。 @sinmetalの記事でも紹介がされていたように、メルペイではGoogle Cloud Spannerを用いて開発しています。 Google Cloud Spannerはまだまだ世界的にもノウハウが乏しい状況です。そのため、メルペイにおいても各開発者が学んだノウハウをGo Fridayなどを通して社内で共有しながら開発を進めています。 社内でノウハウを共有する中で、うっかりミスをしがちでかつそのミスによってサービスに大きく影響を与えるものがいくつか出てきました。例えば、Google Cloud Spannerのセッションを閉じ忘れることによるセッションリークの問題は、うっかりミスをしがちですがサービスに大きな影響を与えかねません。 このような問題を
はじめに前回 は google-cloud-go/spanner のセッション管理について見てみました。セッション管理だけでも Session Pool や Session のライフサイクルの管理など、やっていることは非常に多岐に渡っていましたね。 今回はそのセッションの上でどのように Cloud Spanner のトランザクションが動くのか、クライアントライブラリの実装を元に見ていきたいと思います。 具体的には以下のような点について述べます。 トランザクションとはトランザクションの種類トランザクションを高速化する方法トランザクションのリトライトランザクションの冪等性トランザクションの終了処理前回と同じく google-cloud-go の v0.38.0 時点のものを参照して記述しています。実装に踏み込んだ話もしており、将来に渡って処理内容が変わらない保証はないため、気になる方は最新のバ
この記事は MERPAY TECH OPENNESS MONTH の 2日目の記事です。 こんにちは、メルペイのバックエンドエンジニアの @sinmetal です。 メルペイではメインのデータベースとして、 Google Cloud Spanner を利用しています。 SpannerはGoogleが独自開発した強力なデータベースですが、Google Cloud Spannerがサービスとして公開されてからまだ2年ほどしか経過していません。 そのため、まだ世界に公開されているノウハウが乏しく、メルペイの中でも実際開発していく中で、設計上の苦悩や、運用時の問題にぶつかることがありました。 調査したこと、解決したことなどは記事として公開しているので、Spannerに興味がある方は読んでみてください。 Google Cloud Spanner Deep Dive Spanner Benchmark
はじめにCloud Spanner では各言語ごとにライブラリが提供されており、アプリケーションはそれを使うことで非常に簡単にデータベースにアクセスすることができます。しかし Cloud Spanner の性能を最大限引き出すためには、クライアント側の設定値をチューニングしたりなど、クライアントライブラリの挙動を知っておくことが不可欠です。そこで本記事では Go 言語のクライアントライブラリ (google-cloud-go) を例に、クライアントライブラリがどのような処理をしているかをじっくりと紐解いてみたいと思います。 全てを一度にカバーすると結構なボリュームになってしまうので、まずは本記事で Spanner の「セッション管理」の部分について説明します。本記事を通して ClientConfig や SessionPoolConfig の各値の意味がわかるようになるのが目標です。 尚こ
こんにちは、メルペイのバックエンドエンジニアの @kazegusuri です。 メルペイではメインのデータベースとしてGoogle Cloud Spannerを利用しています。 マイクロサービスによっては秒間数千リクエストをSpannerで処理しています。 いかにSpannerをスケールできるようにして安定させられるかが会社全体として重要になっています。 本記事では数ヶ月間戦ってきたSpannerのレイテンシが高くなる問題とその解決法について紹介したいと思います。 社内への調査報告も含めて書いているため、かなり詳細で長い内容になっています。 なおこの問題の大部分はGoでSpannerを使ったときにだけ発生する問題のため、Javaなどの他の言語では該当しない可能性があります。 CreateSession問題 ここで紹介しなくても良いくらい基本的なところですが、CreateSessionが非常
Google Cloud Spanner: the good, the bad and the ugly As a company that offers multiple cloud-based POS solutions to retailers, restaurateurs and ecommerce merchants around the globe, Lightspeed employs several different types of database platforms for a myriad of transactional, analytical and search use cases. Each of these database platforms have different strengths and weaknesses. So, when Googl
フィードバックを送信 SQL のベスト プラクティス コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。 クエリ実行プランで説明しているとおり、SQL コンパイラは SQL ステートメントをクエリ実行プランに変換します。クエリ実行プランはクエリの結果を取得するために使用されます。このページでは、Spanner が効率的な実行プランを見つけるのに役立つ SQL ステートメントを作成するためのおすすめの方法について説明します。 このページに示す SQL ステートメントの例では次のサンプル スキーマを使用します。 GoogleSQLCREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), B
What DBAs need to know about Cloud Spanner, part 1: Keys and indexes Cloud Spanner is a relational and horizontally scalable database service, built from a cloud/distributed design perspective. It brings efficiency and high availability for developers and database administrators (DBAs), and differs structurally from typical databases you’re used to. In this blog series, we’ll explore some of the k
Last update: 2018/7/5 Google Cloud でゲーム担当をやっているサミールです。 本日のトピックは私が大好きな Cloud Spanner となります。Cloud Spanner は GCP のフルマネージド・グローバルスケール・リレーショナルデータベース・サービスです。Cloud Spanner は裏では NoSQL でよくある分散データベースですので、NoSQL の特性を提供しております。 HA (高可用性)水平方向のスケーラビリティ(動的にダウンタイムなしにノードの追加・削除が可能)なお MySQL のようなリレーショナルDB と同じ特性も提供しております。 スキーマ強整合性SQL クエリ(ANSI 2011)言い過ぎかもしれないが、マルチマスターの MySQL というイメージで良いと思います。 注意点:Cloud Spanner は MySQL 互換では
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く