AWS、Amazon PrimeやKindle、Alexaなどで使用していた約75ペタバイト7500のOracleデータベースをダウンタイムなしで自社データベースサービスへ移行したと報告AWSはAmazon PrimeやAmazonMusic、Alexa、Kindleなどを含む同社のコンシューマ向けビジネスで使われていた75ペタバイト、7500個以上のOracleデータベースを、ダウンタイムなしでAWSのデータベースサービスであるDynamoDBやAman RDS、Aurora、Redshiftなどへ移行したことを明らかにしました。 下記は今回移行を完了したシステムです(「Migration Complete –Amazon’s Consumer BusinessJust Turned offits FinalOracleDatabase」から引用) This include

データベーステーブル設計の基礎の基礎~エンティティの抽出・定義から正規化まで 適切な形でデータベースのテーブルを設計し、運用するには?テーブル設計に必要な初歩を日本MySQLユーザ会副代表の坂井恵さんが丁寧に解説します。 金融系アプリ、ゲーム、人工知能などなど……。どんな種類のシステムを開発する上でも、避けて通れない領域があります。データベースです。データを適切な形式で格納し、取り出す。単純明快ながらも奥深いこの仕組みは、多くのシステムの根幹を支えています。 しかし、適切な形でデータベースのテーブルを設計し、運用するのは簡単なことではありません。「良いテーブル設計」のためには知識と経験が不可欠です。今回は日本MySQLユーザ会の副代表である坂井恵さんに、これからテーブル設計に着手する方に向け、設計に必要な技術と、良い設計を作るための考え方を教えていただきました。 坂井恵(さかい・けい) @

ゴールデンウィークはいかがお過ごしされただろうか。今年は天気も良く、行楽日和が続いたように思う。 さて、先日MySQL 8.0が正式にリリースされた。少し時間が経ってしまったが、今回はMySQL 8.0の新機能について紹介したい。コミュニティ版のダウンロードはこちらから可能だ。 ひとつ前の正式バージョンはMySQL 5.7だったのだが、MySQL 8.0は非常に大きなリファクタリングが含まれており、5.x台のバージョン番号を捨て去ろうという話があった。そこで、次のメジャーバージョンは最初の桁を増やすということになったのだが、MySQL 6.0は過去に既に存在し、買収などの騒ぎで開発が頓挫してしまった経緯がある。7.xはMySQL NDB Clusterと被っている。というわけで、5.7の7の部分の次という意味合いもあって、8.0というバージョン番号を引っさげ、満を持しての登場となった。その

仕事やらなんやらでMySQLのクエリの良し悪しを判断する必要があるとき、EXPLAINの内容だけだとどのぐらい良くなったり悪くなったのか分からないので SET long_query_time = 0; してrows_examined (そのクエリでrows_sent行の結果を返すために何行に触ったのか)も一緒に提示するようにしている(少なくともMySQL 5.7時点ではrows_examinedはslow_query_logでしか確認できないはずperformance_schemaが有効ならevents_statements_historyやその仲間たちで確認できるとのこと*1MySQL ::MySQL 5.6 リファレンスマニュアル :: 22.9.6 パフォーマンススキーマステートメントイベントテーブル)。 例: 上の例のBeforeは、もともとDBAが書いた温かみのあるSQLでO

PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! オープンソースのデータベースとしてよく比較されるPostgreSQLとMySQL。どんな長所・短所があるのでしょう? それぞれの専門家による対談で明らかにします。エンジニアとして働いていると必ず直面する悩み。それは、「どのリレーショナル・データベース(以下、RDB)を選ぶのが最善なのか?」です。RDBごとに長所と短所は異なっています。そのため自社サービスにマッチしないRDBを選んでしまうと、それがボトルネックとなり開発・運用にトラブルが生じるケースは少なくありません。 なかでもよく比較検討されるのが、PostgreSQLとMySQL。ともにオープンソースRDBのデファクトスタンダードであり、高い性能と数多くの機能を持っています。 では、両者は具体的にどのような長所・短所があるのでしょうか。そ

Dirty Read 参考論文1 section 2.2 より、抄訳: トランザクションT1がデータを変更し、COMMITかROLLBACKをする前に、トランザクションT2がそのデータを読む。その後T1がROLLBACKした場合、T2はCOMMITされていない=実在しないデータを読んだことになる。 Non-Repeatable Read Fuzzy Readともいう。 参考論文1 section 2.2 より、抄訳: トランザクションT1がデータを読んだ後、トランザクションT2がそのデータを変更もしくは削除してCOMMITする。その後T1がデータを再度読もうとすると、データが変更されている、もしくは削除されていることが検知される。Phantom Read 参考論文1 section 2.2 より、抄訳: トランザクションT1が、ある検索条件に基づいてデータ集合を読む。その後、トランザクシ

こんにちは、サービス開発部の荒引 (@a_bicky) です。 突然ですが、RDBMS の既存のテーブルを見てみたら「何でこんなにインデックスだらけなの?」みたいな経験はありませんか?不要なインデックスは容量を圧迫したり、挿入が遅くなったりと良いことがありません。 そんなわけで、今回はレコードを検索するために必要なインデックスの基礎知識と、よく見かける不適切なインデックスについて解説します。クックパッドではRails のデータベースとして主にMySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説します。 InnoDB のインデックスに関する基礎知識 インデックスの構造 (B+ 木) InnoDB では B+ 木が使われています。B+ 木は次のような特徴を持った木構造です。 次数を b とすると、

ここに書くことによって途中でやめられなくするメソッドです。ハッカーニュースを眺めていたら以下のようなCS系講義動画のまとめリポジトリが流れていました。GitHub - Developer-Y/cs-video-courses: List of Computer Science courses with video lectures. へーっと思いながら何個かポチってみたところ以下に出くわしました。 15721.courses.cs.cmu.edu英語が(自分にとって)聞き取りやすく、動画の品質(画質やスライドがちゃんと見えるかどうかといった部分)も良いものでかつ興味のある内容で出来ればスライドもおしゃれで・・・となるとなかなか少ないですが、これはかなり見やすいです。 スライドも概念図が頻繁に登場したりして、これだけでも聞き取れなかった部分などをかなり補完できます。 スケジュールページ
Here's an article I wrote describing how to doit using one autoscaling group for the loadbalancer and lifecycle hooks to trigger alambda function to update route53 upon ASG changes. Here are the 3 main steps: 1. Clone theaws-load-balancer repository Most of the magic is handled by ansible so lets get that code: git clone https://github.com/filipenf/aws-load-balancer.git 2. Edit the my-lb config
正規化とは、データを一元管理するための理論です。 1データ1箇所の原則を実現するために、1970年にE.F.Codd氏がリレーショナルモデルの理論として提案しました。正規化の理論は、データの冗長性を排除し、更新時の整合性を維持しやすくすることを目指しています。 具体的には、属性間の関連性を分析し、属性の最適なグループ化を図ることを目的としています。 一般には第3正規化まで行えば十分といわれていますが、本来は、あてはまる場合にはきちんと第5正規化まで行う必要があります。 まず、正規化の処理をする際によく出てくる関数従属という用語の意味を復習しておきましょう。 ◎ 関数従属とは ある属性Aの値が決まると他の属性Bの値が一意に決まるとき、「属性Bは、属性Aに関数従属である」(A→B)といいます。 完全従属とは、2の属性A、Bの間でA→Bが成立し、Aが複数の属性の集合で成り立っている場合、Aのいか

bindParamとbindValueの違いについての覚書です。 bindValue : 値をパラメータにバインドする プリペアドステートメントで使用するSQL 文の中で、対応する名前あるいは疑問符のプレースホルダに値をバインドします。 bindParam : 指定された変数名にパラメータをバインドする 準備されたSQL ステートメント中で、 対応する名前もしくは疑問符プレースホルダにパラメータをバインドします。 PDOStatement::bindValue() と異なり、 変数は参照としてバインドされ、PDOStatement::execute()がコールされたときのみ評価されます。PHPマニュアルの該当箇所には、このような説明があります。 ただ、これだけでは何のことかイマイチ分かりません。 この二つで分かりやすいのは、単純な動作のbindValueです。 基本的な動
(いまだに時々ブクマされていたりしますが、これはバグでMySQL 5.5.21 以降では修正されています。)mysqldump はMySQL のデータのバックアップを取得するコマンドです。mysqldump に --single-transaction を指定すると一貫性を保持したバックアップを取得することができます*1。 この時にmysqldump が発行しているクエリは次のような感じです。 [mysqldump --single-transactionDB名] SETSESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ START TRANSACTION WITH CONSISTENT SNAPSHOT UNLOCK TABLESDB選択 テーブルからデータの読み込み「START TRANSACTION WITH CON
MySQLのmasterとslave 1:1にして参照をslave向けるのってやりたがる人多いみたいだけど、性能たいして上がらない割に可用性落ちるだけだからやめようキャンペーン 2011-06-19 00:16:30 via YoruFukurouMySQL はレプリケーションが簡単に構成できるのですが、時折 master 1台 に対して slave 1台、更新処理は master に、参照は slave に、という構成を目にします。 個人的にはこの構成はお勧めでないと思っているので、その理由を考察してみます。 1. 可用性が落ちる 当然ですが、master, slave のどちらが落ちても影響を受けるために可用性が低下します。 2. 全体の性能がほとんど上がらない master 1台ですべてのクエリを処理する場合と比べて、可用性が落ちる引き換えとして見合った性能向上が得られるか、という
毎日暑い…。というか蒸し暑い。何年か前にベトナムとカンボジアをバックパッカー旅行したときを思い出す。日本の気候が亜熱帯ってか東南アジアっぽくなってきたような…昔はこんな頻繁にゲラリ豪雨とか降らなかったよねー?温暖化ってやつ?日本の植生とか変わるんじゃねーのかな…。 えーと、おれがよく見ている技術ブログの一つにPercona社のMySQL PerformanceBlogがある。そのブログに先日、「Why is the ibdata1 file continuously growing inMySQL?」という記事が投稿された。内容はInnoDBのibdata1の肥大化とその解消方法に関するもの。ibdata1の肥大化を解消する手段は、ダンプをとってDBを作り直してあげないと治らないということは多くのInnoDBユーザが知っていることだと思うけど、おれもInnoDBを触り始めたころは、「気
第32回 PostgreSQL 勉強会(2015年10月10日)で登壇してきました。 内容は前に書いたエントリーのMySQL使いが知るべきPostgreSQLとの違いと変わらない一つのことMySQL使いの人がPostgreSQLを始めるときの罠をまとめてみた を元に発表してきました。 と言っても今回は参加者がPostgresSQLに詳しい前提だったのでMySQLを中心に話をしました。 実際の資料は下記のとおりです。 当日はビデオ撮影があったのでそのうち動画が上がると思います。 第32回 PostgreSQL 勉強会まとめ ~togetter ~ 流石に2時間は疲れました。 内容としては眠くならないように面白おかしく伝えようと思ったのですがなかなか難しかったです。 前半はMySQLとPostgreSQLの方向性の違いをメインにしました。 後半はMySQLは僕が実際にハマった事などをメイ
# !/bin/sh host=localhost user_name=hogeuserdb_pass=hogepassworddatabases=($(/usr/bin/mysql -h ${host} -u ${user_name} -p${db_pass} -e "SHOWDATABASES;"|\ grep -v -eDatabase -e information_schema -emysql -e performance_schema)) fordatabase in ${databases[@]};do /usr/bin/mysql -h ${host} -u ${user_name} -p${db_pass} -e "SHOW TABLES from ${database};"|\ grep -v Tables_in_${database}|\ xargs -I

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く