タグ

ブックマーク / yakst.com (56)

  • LIKE句のSQLインジェクション | Yakst

    GitHubエンジニアがデータベースのスローログから見つけた、LIKE句を使ったクエリーのパフォーマンス問題につながる可能性のある文字列。問題の仕組みと、それを回避するためのスニペット。 先日、例外情報のトラッカーを見回していたら、目を引くスロークエリーログを発見しました。SELECT ... WHERE ... LIKEといったクエリーのLIKE句にたくさんのパーセントが付いているのです。この部分はユーザが入力した部分なのは明らかで、最初私はSQLインジェクションを疑いました。 [3.92 sec] SELECT ... WHERE (profiles.email LIKE '%64%68%6f%6d%65%73@%67%6d%61%69%6c.%63%6f%6d%') LIMIT 10 コードを見てみると、ここで解釈されるメタ文字(%や_や\)のチェックをまったくせずにユーザが指定し

    LIKE句のSQLインジェクション | Yakst
    clavier
    clavier 2015/11/17
    LIKE句のSQLインジェクション | Yakst[security]
  • マイクロサービス時代のHAProxy | Yakst

    マイクロサービスのアーキテクチャでシステムを開発すると、サービス間の通信を効率的に管理する方法が必要になる。この問題を解決するためにHAProxyを使う一例を提示する。 「マイクロサービス」は、この10年でもっとも興味深いアーキテクチャーのスタイルを表す言葉として、使い散らされている最新のアーキテクチャーバズワードでしょう。 マイクロサービスとは? Martin Fowlerの定義によれば以下のようになります。 要するにマイクロサービスというアーキテクチャーのスタイルは、それぞれが独自のプロセスで動きHTTPリソースAPIなどの軽量なメカニズムでコミュニケーションを取り合う小さなサービスの形をとったひとつのアプリケーションを開発していくというアプローチです。これらのサービスは、ビジネス上の機能を中心に作られ、完全に自動化されたデプロイの仕組みによって、別々にデプロイできます。これらのサービ

    マイクロサービス時代のHAProxy | Yakst
  • MySQLによくないクエリの種類とは? | Yakst

    Web開発チームに、どのようにMySQLを使うべきかについて書いていたところ、これから共有する以下のリストを考えついた。「MySQLにとってよくないクエリとはどんなものか?」 あらゆるクエリはよくない。どうしても必要な時だけクエリを送ること(ヒント : memcachedやRedisのようなキャッシュの仕組みを使おう) たくさんの行にアクセスするクエリはよくない。以下のようにやろう(訳注 : プライマリキーをイコール指定したwhere句を使おう、の意)。 SELECT col1 FROM table1 WHERE primary_key_column=SOMETHING あるいは最低でも以下のようにしよう(訳注 : インデックスが張られたカラムをイコール指定したwhere句を使おう、の意)。 secondary_key_column=SOMETHING これがどうしても不可能なら、最低限必

    MySQLによくないクエリの種類とは? | Yakst
  • MySQL 5.6と5.7における高度なクエリチューニングのQ&A(The Percona Performance Blogより) | Yakst

    8年以上前投稿 修正ありMySQL 5.6と5.7における高度なクエリチューニングのQ&A(The Percona Performance Blogより) 出典について この記事はThe Percona Performance Blog内のAlexander Rubin氏による「Advanced Query Tuning in MySQL 5.6 and MySQL 5.7 Webinar: Q&A」(2015/8/24)を翻訳したものである。 8月22日のオンラインセミナー「MySQL 5.6および5.7における高度なクエリーチューニング」に参加していただいてありがとう(私のスライドおよび動画はここで確認できる)。ここでは質問とその回答の一覧を紹介する(いい質問をありがとう) 。 Q: ここにexplainの例がある mysql> explain extended select id,

    MySQL 5.6と5.7における高度なクエリチューニングのQ&A(The Percona Performance Blogより) | Yakst
  • MySQL 5.7の新機能完全リスト | Yakst

    MySQL 5.7には150を超える新機能がある。 MySQLのマニュアルはとてもいいものだが、少し長すぎる。これは、新機能の箇条書きリストだ。それぞれの機能について1つずつまとめるように頑張ってある。なので、 InnoDBのネイティブパーティショニング については、InnoDBの項かパーティショニングの項のどちらかにだけ載っている。 MySQL 5.7.8 RC2はここからダウンロードできる それか、yumかaptのリポジトリーからもインストール可能だ。 レプリケーション関連 マルチソースレプリケーション(訳注: 1スレーブに複数マスターを設定可能になった) [ 1 ] オンラインでのGTIDの有効化 [ 1 2 3 ] 準同期レプリケーションの性能向上 [ 1 2 ] ロスレス準同期レプリケーション [ 1 2 ] 準同期レプリケーションでいくつのスレーブからACKが返ってくるまで待つ

    MySQL 5.7の新機能完全リスト | Yakst
  • Otto : モダンな開発者の新しい友人 | Yakst

    HashiConfで発表されたHashiCorpの新しいツールOtto。Vagrantの後継という位置付けですが、OttoとVagrantとの技術的な違いは何か、コンセプトはどのようなものか、今後どのように使われていくのかといったことを分かりやすくまとめた記事。 出典について この記事は、Benny Cornelissen氏によるOtto: a modern developer's new best friendを翻訳したものです。 Ottoとは? HashiCorpによると、OttoはVagrantの後継という位置づけです。Vagrantはリリースされてからたくさんの変更が加えられていますが、大きな改善をしつつも、最初にリリースされた時とほとんど同じことを基的にはやっています。Ottoを使えば、ローカル開発からデプロイまでのワークフロー全体を見直されることになるでしょう。 Ottoは

    Otto : モダンな開発者の新しい友人 | Yakst
    clavier
    clavier 2015/10/06
    HashiCorp Otto : モダンな開発者の新しい友人 | Yakst
  • GitHub : ノマドなエンジニア達とRubyをスケールさせる | Yakst

    GitHub技術ディレクターが語る、GitHubのインフラの特徴と、社員の6割がリモート勤務という社風、Hubotを使った協力的かつ新しい働き方。 Sam Lambertは、2013年にGitHubの最初のデータベース管理者として入社し、現在はGitHub技術ディレクターを務めています。このインタビューで彼は、今や1000万以上のユーザと2500万以上のプロジェクトを誇るサービスが、比較的シンプルな技術的スタックの上でどのようにスケールし続けてきたのかを考察しています。また、自作のパワフルなチャットボットであるHubotを使ってコラボレーションしつつ、従業員の約6割がリモートで働いているという、GitHubの大規模なオフィスレスな仕事環境についても触れています。 SCALE: 私としては、GitHubテクノロジーのユーザーというよりは主にテクノロジーの提供者であると思っていますが、そ

    GitHub : ノマドなエンジニア達とRubyをスケールさせる | Yakst
  • InnoDBの透過的ページ圧縮(MySQL Server Blogより) | Yakst

    InnoDBではMySQL 5.1のInnoDBプラグインからページ圧縮の機能があるが、新しく透過的なページの圧縮が実装された。機能上の制約、内部の実装、ベンチマーク結果などをご紹介する。ハードとファイルシステムを適切に選ぶことで最大300%の性能向上と旧来の圧縮と同等の圧縮効果が得られる可能性がある。 免責事項 この記事はSunny Bains氏によるMySQL Server Blogの記事「InnoDB Transparent Page Compression」(2015/8/18)をユーザが翻訳したものであり、Oracle公式の文書ではありません。 鋭敏な読者の皆様はInnoDBMySQL 5.1のInnoDBプラグインから既に圧縮機能をもっていることに気がついているだろう。我々は「ページ圧縮(Page Compression)」という用語はMySQL 5.7でリリースされる予定の

    InnoDBの透過的ページ圧縮(MySQL Server Blogより) | Yakst
    clavier
    clavier 2015/09/27
    InnoDBの透過的ページ圧縮(MySQL Server Blogより) | Yakst
  • Linuxカーネルハッカーになる4つの方法 | Yakst

    Linuxカーネル開発者になりたいと思っても、まず何から手をつけたらいいか分からず、始める前から挫折する人も多いだろう。すぐ始められる最初の一歩の例が、筆者の経験を交えて4つ挙げてある。 (これは、CUSECというイベントでの、カーネルは怖くないという話の続き) カーネルプログラミングを始めるにはどうしたらいいか、アドバイスを求めたことがある。その時は、こう回答があった。 仕事のためにカーネルを理解する必要がなくても、やってみたらどうだろう? Linuxカーネルメーリングリストに登録してみて、精一杯理解しようと頑張ってみよう。 メインのLinuxカーネルの一部にならないコードを書いているなら、時間の無駄だ。 これは私にとっては、全然、少しも役に立たなかった。そんなわけで、ここでは、あなたなりにOSやLinuxカーネルがどう働くか、楽しみながら理解していくための、いくつかの戦略について書いて

    Linuxカーネルハッカーになる4つの方法 | Yakst
    clavier
    clavier 2015/09/14
    Linuxカーネルハッカーになる4つの方法 | Yakst
  • The art of command line (日本語訳) | Yakst

    コマンドラインで素早い操作ができるのは、優れたエンジニアの資質の一つとも言える。そのためのテクニックを集めた珠玉のコマンド集。 原文のコミット bb0c38c0899339e836c37eead4a9534b06c56662 The Art of Command Line メタ情報 基 日常的に使うもの ファイルとデータの処理 システムのデバッグ ワンライナー 目立たないが便利なもの さらなるリソース 免責事項 コマンドラインで流れるように操作ができるということは、軽く見られたり他人から理解されないスキルだとみなされることもあるでしょう。しかしそのスキルは、明らかにかすぐ分かるようかは問わず、エンジニアとしてのあなたの柔軟性や生産性を改善してくれるものです。ここでは、Linuxでコマンドラインを使う上で便利だと思ったメモやTipsの数々を挙げてみます。あるものは基礎的ですが、非常に詳しい

    The art of command line (日本語訳) | Yakst
  • InnoDBにおける効果的な関数インデックス(MySQL Server Blogより) | Yakst

    MySQL 5.7では生成列の機能が追加され実体化されない仮想列を作成できるようになった。ユースケースとしては関数インデックスを効果的に利用すると、JSONなどをうまく扱える可能性がある。 免責事項 この記事はJimmy Yang氏によるMySQL Server Blogの投稿「JSON Labs Release: Effective Functional Indexes in InnoDB」(2015/4/9)をユーザが翻訳したものであり、Oracle公式の文書ではありません。 MySQL 5.7.6では、我々は生成列(Generated Columns)と呼ばれる新しい機能を追加した。最初の段階では全ての生成列は、仮想的なものであってもマテリアライズされていた。これでは不要なディスクスペースが使用され、ディスクI/Oが発生するだけでなく、いかなるテーブルの変更に対してもテーブルを完全に

    InnoDBにおける効果的な関数インデックス(MySQL Server Blogより) | Yakst
  • MySQL 5.7におけるサーバーのデフォルト値の改善 (MySQL Server Blogより) | Yakst

    MySQL 5.7でのデフォルト値の変更について簡単に紹介する。レプリケーション、InnoDB、パフォーマンススキーマ、セキュリティー、オプティマイザ、その他全般の改善など様々な改善がされている。 免責事項 この記事はMatt Lord氏によるMySQL Server Blogの投稿「Improved Server Defaults in 5.7」(2015/7/22)をユーザが翻訳したものであり、Oracle公式の文書ではありません。 Morganと私はしばらく前にMySQLの"今やもう良くない(out of the box)"設定および挙動のデフォルト値を改善する計画を開始した。コミュニティーと密接に実施することにより、すばらしい改善の一覧が作成できた。これはMySQL 5.7.7のリリースから成果を出し始めた。私は何が変わったか、通常のユーザーおよびインストールの場合、なぜMySQL

    MySQL 5.7におけるサーバーのデフォルト値の改善 (MySQL Server Blogより) | Yakst
    clavier
    clavier 2015/08/07
    Yakst - MySQL 5.7におけるサーバーのデフォルト値の改善 (MySQL Server Blogより)
  • HerokuのPostgreSQLとAmazon RDSのPostgreSQL | Yakst

    PostgreSQLを自前でホスティングせずに使う場合の2大プレイヤーHeroku PostgreSQLAmazon RDS for PostgreSQLを比べる 出典について この記事は、CODESHIP内のBarry Jones氏による「Heroku PostgreSQL vs. Amazon RDS for PostgreSQL」(2015/06/17)を翻訳したものです。 PostgreSQLは十分な機能を備え、Web開発を行うときのリレーショナルデータベースの選択肢となってきた。 開発チームは自前でホスティングするか、サービスプロバイダーのデータベースを利用するかの選択に迫られる。 PostgreSQLの世界での2大プレーヤーといえば、Heroku PostgreSQLAmazon RDS for PostgreSQLである。 今日は、この両方のプラットフォームを比較すること

    HerokuのPostgreSQLとAmazon RDSのPostgreSQL | Yakst
  • MySQL 5.7で削除または廃止予定となる機能について (MySQL Server Blogより) | Yakst

    免責事項 この記事はErlend Dahl氏によるMySQL Server Blogの投稿(2015/6/17)をユーザが翻訳したものであり、Oracle公式の文書ではありません。 MySQL 5.7の最初のリリース候補版(RC)のリリースから、次のサーバーのメジャーバージョンが急速に形になってきています。5.6がGAとなってからおよそ2年半にわたって、巨大な製品とコードベースを開発し維持する負担を軽減する為に、サーバーのコードの効率化に取組んできました。 この仕事の重要なところは、廃止予定(deprecation)と削除(removal)です。 機能を廃止予定とする(deprecating)ということは、我々が外部に「この機能は現在のところ利用可能である一方、将来のリリースで廃止されるため、利用の仕方にあわせて適応して欲しい」とお知らせしていることになります。機能を削除する(removi

    MySQL 5.7で削除または廃止予定となる機能について (MySQL Server Blogより) | Yakst
  • PostgreSQLのアンチパターン : 何でもかんでもjsonに入れる | Yakst

    PostgreSQL 9.2より追加されたJSON型だが、特徴を理解して適切に使わないと色々な副作用に悩まされることになる。その問題点を挙げると共に、どのような場合に使うべきかの指針を示す。 PostgreSQLは、データ型としてjsonをサポートしています。しかし、やりたいことがある時に何でもかんでもjson型を使ってしまうというのはやめるべきです。これは、hstoreや新しく登場したjsonb型にも同じことが言えます。これらの型は必要な時には便利なツールになりますが、PostgreSQLでデータのモデリングを行う際に最初に検討すべきものではありません。 なぜなら、データを呼び出したり操作したりするのが難しくなってしまうためです。 何もかも同じところに入れてしまおうとすることによるアンチパターンをご存知の読者もいるでしょう。EAVアンチパターンは、長らくデータベーススキーマにおける必要悪

    PostgreSQLのアンチパターン : 何でもかんでもjsonに入れる | Yakst
    clavier
    clavier 2015/06/02
    Yakst - PostgreSQLのアンチパターン : 何でもかんでもjsonに入れる
  • MySQLインデックスの基礎 その2 : 2つのクエリの違いとオプティマイザの判断 | Yakst

    MySQLのインデックスを効果的に使う方法の第2弾。よく似た2つのクエリなのに、実際にはインデックスの使い方がそれぞれ異なることを通じて、オプティマイザがどのようにクエリの実行計画を立案するのか、そしてその結果どうインデックスが使われるのかを解説する。 前の記事では、ひとつのテーブルに対する様々なクエリを対象にして、インデックスのデザイン方法について議論しました。この記事ではより実世界に即した問題解決の例として、よく似ているにも関わらず、ひとつは適したインデックスを使い、もうひとつはフルテーブルスキャンをしてしまうという、2つのクエリを取り上げます。動作の違いはバグなのでしょうか?それとも想定された動きなのでしょうか?続きを読んでみてください! 対象のクエリ2つ # Q1 mysql> explain select col1, col2 from t where ts >= '2015-0

    MySQLインデックスの基礎 その2 : 2つのクエリの違いとオプティマイザの判断 | Yakst
  • MySQLインデックスの基礎 : ひとつのテーブルに対するクエリの最適化法 | Yakst

    MySQLのインデックスを効果的に使うにはどうしたらいいのかについての分かりやすい解説。そもそもインデックスの役割はとは何か、そしてどうすればその役割を果たしてくれるのかを説明する。 たとえ1つのテーブルだけに対して実行されるクエリでも、パフォーマンスが悪いというのはよくあることです。その理由は簡単で、インデックスの作り方がまずいため、実行計画がおかしくなってしまうのです。ここでは、1つのテーブルのみに対する色々なクエリを最適化するためのガイドラインを挙げてみたいと思います。 おことわり : あらゆる状況をカバーしようとはせず、一般的なガイドラインを提示するに留めるつもりです。ここで挙げたものがうまく適用できない例を簡単に見つけることができるのは間違いないでしょうが、ほとんどの場合はここに書いたことが十分なのも事実です。また、MySQL 5.6以上にあるIndex Condition Pu

    MySQLインデックスの基礎 : ひとつのテーブルに対するクエリの最適化法 | Yakst
    clavier
    clavier 2015/05/25
    Yakst - MySQLインデックスの基礎 : ひとつのテーブルに対するクエリの最適化法
  • bashで素晴らしく生産性を上げるための10のテクニック | Yakst

    よく使うコマンドの組み合わせを関数として.bashrcに書いておく事で、色々な操作が簡単になる。筆者の.bashrcとそこに書かれた実用的な関数のサンプル、使用例。 (訳者注) 原文タイトルが「Ten tips for wonderful bash productivity」なので、10のテクニックというタイトルにしていますが、実際には9つしかありません。原文筆者に指摘したところ人も自覚されていなかった模様?です。悪しからず。 私はいつも自分のbashの環境をいじったり直したりしています。同じような問題に何度も遭遇しては、その度に解決策を探さねばなりません。うんざりして座り込んでしまうまでそれは続きます。お前いつも座って仕事してるだろって? ええ、でももう皆さんお分かりでしょう。そういう場合は、カスタム関数を作って、それを.bashrcに書き込んで、ログインする可能性のあるマシン全部に入

    bashで素晴らしく生産性を上げるための10のテクニック | Yakst
    clavier
    clavier 2015/02/09
    Yakst - bashで素晴らしく生産性を上げるための10のテクニック
  • バグを増やさないためにコードレビューのチェックリストを使う | Yakst

    チーム内で良くある間違いなどをチェックリストにし、それをコードレビュー時に使う事で、コード自体のレベルを上げつつコードレビューの品質のばらつきをなくす取り組みについて。Trelloなどを開発するFog Creek社のブログの翻訳。 効果的なコードレビューについて書いた我々のブログ記事の中で、チェックリストを使う事を推奨した。チェックリストを使う事で、レビューが継続的にチーム全体でうまくはたらくようにできる。また、ありがちな問題を見つけたり解決したりするのを確実にする、簡単な方法でもある。 ソフトウェア工学研究所の研究によると、プログラマは15から20の良くある間違いをしてしまいがちだという。そういった間違いをチェックリストに追加しておく事で、問題が起こった時にそれを特定し、確実に駆逐するようにできる。 チェックリスト作りに取り掛かるに当たって、一般的な項目は以下のリストのようになるだろう。

    バグを増やさないためにコードレビューのチェックリストを使う | Yakst
  • MySQLのレプリケーションでありがちな10の問題 | Yakst

    レプリケーションの問題でよくある10パターン。 1) セッションのみで有効なバイナリログ sql_log_bin = 0を設定すると、そのセッション内でバイナリログを無効にできる。つまり、マスタのセッション内で実行したDMLやDDLは、スレーブにはレプリケーションされない。 マスタでバイナリログをオフにする。 mysql> set sql_log_bin = 0 ; Query OK, 0 rows affected (0.00 sec) reptestデータベースにテーブルを作成してみる(マスタ上で実行)。 mysql> create table reptest(ID int) ; Query OK, 0 rows affected (0.01 sec) mysql> show tables ; +-------------------+ | Tables_in_reptest | +-

    MySQLのレプリケーションでありがちな10の問題 | Yakst