タグ

dbとTipsに関するko-ya-maのブックマーク (88)

  • プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight

    おそらく多くのソーシャル系アプリにあてはまるRailsのプチ・デザインパターン的な話。 ぼくが今やっているEast Meet Eastには、ユーザごとに数多くのプロフィール属性があります。名前、性別、生年月日、郵便番号、職業などなど、カラム数にしてざっと25個。これを、全部ひとつのusersテーブルに詰め込むのは、コードの見通しという観点からも性能の観点からも、あまりよろしくありません。 なぜならば、ユーザ関連の情報を扱う局面としては主に メールアドレスとパスワードなどを使ってログインする(アカウント情報) プロフィール情報で条件を指定してユーザを検索・推薦する(プロフィール情報) という2つの独立性の高いユースケースにわかれるため、ログイン処理をやってるときにはプロフィール情報はいらないし、プロフィールを検索してるときにはメールアドレスやパスワードをロードするのは無駄です。また、開発やデ

    プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight
  • サーバー未経験者がソーシャルゲームを通して知ったサーバーの事

    2014/2/8に行ったゲームサーバ勉強会でのスライドです。 サーバー未経験者がソーシャルゲームを通して知ったサーバーの事。 失敗経験を元に何故今がこうなっているかというのを詰め込みました。 初心者〜中級者向け勉強会だったので、なるべく非エンジニアでもイメージで伝わるようにちょっとだけ心がけてます。

    サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
  • MySQLをインストールしたら、必ず確認すべき10の設定 | Yakst

    MySQL Performance Blogの翻訳。インストール後に必ず設定を確認しなければならない設定パラメータ10つを挙げ、その意味を解説する。MySQLの設定変更時の、一般的な注意点も合わせて。 January 28, 2014 By Stephane Combaudon 我々がパフォーマンス監査の仕事をする時には、MySQLの設定のレビューと改善提案を求められる。大抵の場合、たくさんのオプションがある中でほんのいくつかの設定しか変更するように提案しないことに、多くの顧客は驚く。この記事のゴールは、もっとも重要な設定をいくつか挙げてみることにある。 既にこういった提案は過去にもしているが数年前のもので、それ以来MySQLの世界ではたくさんの変化があったのだ。 話の前に 熟練した人でも、重大なトラブルを引き起こすミスをしでかすことがある。従って、ここに挙げたものを盲目的に適用する前に、

    MySQLをインストールしたら、必ず確認すべき10の設定 | Yakst
  • PostgreSQLでテストデータを作成する | Let's POSTGRES

    笠原 辰仁 記事は2013年のPostgreSQL Advent Calendar の 12/25 の記事です(地味なトピックになってしまいすいません)。PostgreSQLでのテストデータ作成に役立つ機能を紹介します。 はじめに PostgreSQLを対象としたの性能検証や機能検証を行う際に、開発環境や試験環境でスキーマ(テーブルやインデックス)を作成し、ダミーのデータを投入してSQLのチェックを行うことが多々あるかと思います。単純な機能の正常試験であれば少量のデータ投入で事足りると思いますが、大量のデータに対する検索処理やバッチ処理を試す際は、それなりの量の試験データを生成し、DBに投入する必要があります。 通常、試験データは、例えば専用のジェネレータを作る、実際のデータをマスキングしたものを使う、サンプルとして存在するデータ(郵便番号のデータなど)を利用する、といったことが多いと思

    ko-ya-ma
    ko-ya-ma 2013/12/25
    PostgreSQL上だけでどこまでいけるか
  • 論理削除が奪うもの

    論理削除が奪うもの JPOUGのAdvent Calendar 12/10担当です。 12月 - 忘年会シーズンです。酒で記憶を失っている際に、怒ったとか、近くにいた人にカラんだとか、脱いだとか、毛を燃やしたとか、エレベーターホールにズボンが脱ぎ捨てられていたとか、会議室でが発見されたとか、そういう事件が多発する月ですね。皆様いかがお過ごしでしょうか。 微塵も記憶がない状態で、やらかした内容を色々な人から聞かされるにつけ、穴を掘って蓋してセメントで埋めてもらいたくなるのは常ですが、こういう時はどんな対処を取ればいいんでしょう。 得てしてロクでもない行動を取った時の翌日における参加者の記憶力の良さと来たらFlight Recorderも真っ青です。 なんとか失敗を無かったことにしたいと立ち回りたいですが、まあ無理です。各所にヒアリングを重ねれば重ねるほど確度と精度が高まります。エビデンスま

    論理削除が奪うもの
    ko-ya-ma
    ko-ya-ma 2013/12/25
    >本来削除されてはいけないモノに対して削除要否の検討機会をひっそりと奪う。そう、論理削除は積極的に削除を推奨するわけではなく、静かに「削除してもいいよ」と囁き続ける。だからこそ気付かない。
  • PDOでATTR_EMULATE_PREPARESを適切に設定してないとSQLインジェクションの原因になるかも(MySQL編) - Qiita

    確認環境 MySQL 5.5.27 PHP 5.4.7 現象 PDO::setAttribute( ATTR_EMULATE_PREPARES, false ) をせず、prepareしても静的プレースホルダは使用されない。 確認 <?php $dsn = 'mysql:dbname=test;host=localhost'; $user = 'root'; $password = ''; try{ $pdo = new PDO($dsn, $user, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $sql = 'select blog_id, blog_name from b

    PDOでATTR_EMULATE_PREPARESを適切に設定してないとSQLインジェクションの原因になるかも(MySQL編) - Qiita
  • InnoDBのロックの範囲とネクストキーロックの話 - かみぽわーる

    この記事はMySQL Casual Advent Calendar 2013 3日目の記事です。 はじめに 以前にSELECT ... FOR UPDATEとロックの挙動 - walf443's blogの記事にTwitterで少し言及したんですが、それの補足というか、InnoDBのロックの範囲について僕はこう理解していますよという話です。 MySQLといえば、InnoDBをネットワークサーバとして使うためのフレームワークであり、SQLはInnoDBのインデックスにアクセスするためのDSLといっても過言ではないでしょう。 InnoDBのロックとはつまるところインデックス行のロックなので、InnoDBのロックの範囲を理解するためにInnoDBのインデックスについて少し前置きしておきます(だいぶ端折ったけど長くなった…)。 クラスタインデックスとセカンダリインデックス すでにInnoDBのイン

    InnoDBのロックの範囲とネクストキーロックの話 - かみぽわーる
  • SQLでエスケープなんてしたら負けかなと思ってる。 - めもおきば

    オレオレSQLセキュリティ教育は論理的に破綻している | yohgaki's blog 「プリペアードクエリが基だけど、動的に SQL を組み立てる場合もあるから、そういう場合に備えてエスケープも知っておいたほうがいいかも」 - Togetterまとめ SQLインジェクション対策で大垣靖男氏は何を勘違いしていたか | [ bROOM.LOG ! ] エスケープとプレースホルダをめぐる議論 - Togetterまとめ SQLインジェクション対策としてのプリペアドステートメントとエスケープについての議論 - Togetterまとめ IPAの「安全なSQLの呼び出し方」が安全になっていた | yohgaki's blog SQLへの安全な値の埋め込み方について、ここ数日で色々議論というか意見の投げ合いがありましたが、自分としての考えをまとめておきます。 1. SQLに値を埋め込む場合は、プリペ

    SQLでエスケープなんてしたら負けかなと思ってる。 - めもおきば
  • 第3回 テーブル設計のグレーゾーン~毒と薬は紙一重 (4)サロゲートキーVSナチュラルキー | gihyo.jp

    サロゲートキーVSナチュラルキー DBエンジニアの方なら、サロゲートキー(代理キー)という言葉をご存じでしょう。これは、テーブルへの入力データにある列を主キーとせずに、システム側で独自に割り当てるキーのことです(一般的には連番が使われます⁠)⁠。これに対して、入力データ自体の列を主キーにする場合はナチュラルキー(自然キー)と呼びます。 サロゲートキーは、基的には不要なものです。入力データに一意なキーが存在していればそれを主キーとして使うことで、普通は問題ありませんし、オートナンバリングの機能も長らく標準SQLには存在していなかったからです(そのため、今でも実装ごとにやり方はバラバラです⁠)⁠。しかし、以下のような業務要件の場合には、サロゲートキーを使うことを考えます。 ① そもそも入力データに主キーにできる項目がなく、データが重複している場合 ② 主キーの値が使いまわされる場合 ③ 主キ

    第3回 テーブル設計のグレーゾーン~毒と薬は紙一重 (4)サロゲートキーVSナチュラルキー | gihyo.jp
  • ナチュラルキーとサロゲートキーについての議論

    とあるブログエントリで「ナチュラルキーを主キーにしてはいけない」という主張を見かけたのでこれに反論しておく。これはリレーショナルモデル的には明らかに間違った考えだからだ。 リレーショナルモデルにあるのはナチュラルキーだけリレーショナルモデルには「サロゲートキー(代理キー)」という概念はない。まずこの点に注意して頂きたい。サロゲートキーとは、データベースアプリケーション開発において実用上必要とされる機能であって、質的には不要のものである。リレーショナルモデルでは、いわゆるナチュラルキーというものがあれば機能的には十分だからだ。 そのためにはまず「キー」という概念が何を指し示すかということについて正しく理解しなければならない。リレーショナルモデルではキーと呼ばれるものは候補キーとスーパーキーという2つの概念だけである。「タプル(≒行)の値を一意に決定することができる属性(≒カラム)の集合」の

    ナチュラルキーとサロゲートキーについての議論
  • Mysql toranomaki

    カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09Mikiya Okuno

    Mysql toranomaki
    ko-ya-ma
    ko-ya-ma 2013/11/25
    by 漢のコンピュータ道
  • 肥大化したActiveRecordモデルをリファクタリングする7つの方法(翻訳)

    更新情報: 2013/11/19: 初版公開 2021/01/08: 訳文見直し、追記 こんにちは、hachi8833です。今回は、自分が知りたかった、Active Recordモデルのリファクタリングに関する記事を翻訳いたしました。1年前の記事なのでRails 3が前提ですが、Rails 4以降でも基的には変わらないと思います。リンクは可能なものについては日語のものに置き換えています。 なお、ここでご紹介したオブジェクトは、app以下にそれぞれ以下のようにフォルダを追加してそこに配置します。 注記: 以下は使われそうなフォルダを列挙しただけであり、実際にはこの一部しか使いません。 Value Object Service Object Form Object Query Object View Object Policy Object Decorator ⚓ 肥大化したActive

    肥大化したActiveRecordモデルをリファクタリングする7つの方法(翻訳)
  • データベースアプリケーション開発を炎上させる負のスパイラル

    毎度おなじみ、はてブのホットエントリに「SIをダメにする負のスパイラル」というタイトルのまとめが掲載された。きしだ氏とはかなり視点は違うものの、開発現場の問題点については少し思うところがあるので意見を書いてみようと思う。と言っても、以下の話の内容はデータベースアプリケーションに限定した話であり、またSIerだけに限った話ではないのでその点はご容赦頂きたい。もちろんSIer各位の案件はデータベースは必須なので、エントリで触れる問題点には該当するだろう。 Q.なぜ炎上するのか? A.正しいデータベース設計ができていないから結論から言おう。データベースアプリケーションの開発が炎上するのは正しいデータベース設計ができていないからだ。ここでいう「正しい」とは、論理的に証明できる正しさという意味ではない。「来こうするべき」といった意味で捉えて欲しい。 「炎上」というのは、例えばテストが通らない、バ

    データベースアプリケーション開発を炎上させる負のスパイラル
    ko-ya-ma
    ko-ya-ma 2013/11/18
    これこれ、こういうこと大事
  • FuelPHPのクエリビルダを表にまとめた - BTT's blog

    ※Ver1.2の情報なので最新バージョンと合わない部分があるかもしれません... タイトルそのまま。FuelPHP1.2のクエリビルダ関連を表にまとめました。 SELECT // SELECT * FROM... \DB::select() // SELECT `hoge`, `fuga` FROM... \DB::select(column1, column2...) \DB::select_array(array(column1, column2...)) // SELECT `hoge` AS `h`, `fuga` AS `f` FROM... \DB::select(array(column1, alias), array(column2, alias)...) \DB::select_array(array(column1, alias), array(column2, ali

    FuelPHPのクエリビルダを表にまとめた - BTT's blog
  • モバイルゲームにおけるAWSの泥臭い使い方

    EC2ではマルチキャストが使えないから○○が動かないってよく聞きます。確かにVPCであってもEC2ではL2ブロードキャストはサポートされていないので、ENIにブロードキャスト/マルチキャストパケットを投げても誰にも届きません。でも当たり前ですが、ユニキャストはできますよね?であればアプリケーションがマルチキャストのつもりで投げたパケットを捕まえて、L3アドレスはそのままにL2で複数のユニキャストフレームとして送ってしまえばいいのでは?そんな事を試して実際動く事を確認したところをデモを含めてお届けします。

    モバイルゲームにおけるAWSの泥臭い使い方
  • PHPでデータベースに接続するときのまとめ - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。PDO に関しては大きく変わっていない部分が多いとは思いますが, PHP 8.x 以降での動作保証はありません。 あらかじめ読んでおきたい記事 Qiita - 【PHP超入門】クラス~例外処理~PDOの基礎 by @7968 初心者がやりがちなミス 以下のどれかに1つでも当てはまるコードは見直す必要があります.付録にリンクを貼っておきましたので,「該当するかも?」という人はクリックして飛んで読んでください.太字にしてあるものは脆弱性に直結する危険度の高いものです. mysql_query などの非推奨関数を利用している SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している そもそもデータベース

    PHPでデータベースに接続するときのまとめ - Qiita
    ko-ya-ma
    ko-ya-ma 2013/09/06
    実践的なまとめ
  • Redis Sentinelを運用してみたお話 | GMOメディア エンジニアブログ

    こんにちは、宇津井です。 弊社ではゲソてんというゲームプラットフォームを運営しております。ゲソてんではサービスリリース当初から主にキャッシュ的な役割でRedisを導入していました。つい先日の事ですが訳あってRedis 2.6からサポートされたRedis Sentinelを採用しました。今回は、採用に至った経緯をご紹介します。 簡単なシステム構成 パフォーマンスは良いし、Memcachedには無い便利な機能を提供するRedisですが約一年間運用していくつかの問題が出てきました。 Redisサーバーが突然高負荷に陥るするとWebサーバーも高負荷に陥るRedisのReplicationは張ってるけどアプリケーション側でRedis Slaveへフェイルオーバーしない(MySQLを直接参照する)Redis落ちると恐らくMySQLサーバーが耐えられない(落ちた事無いけど)という事で対策を行ってきました

    ko-ya-ma
    ko-ya-ma 2013/04/24
    採用案は、「cronでSentinelを監視して、Masterが切り替わったらiptablesのDestination Nat 情報を書き換える」
  • SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?

    OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation

    SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
  • http://www.2ch-search.net/blog/3

  • ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ

    ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門 広く浅くを担当してます、ota です。 技術ブログ第一回から早速流用スライドで申し訳ありませんが、社内勉強会資料として作成した「MySQL INDEX + EXPLAIN入門」です。 当社でもソーシャルゲームの開発を行っていますが、このような大量のデータを使用する・クエリの速度が求められる場合にインデックスは大変重要です。 インデックスの有効な利用にはDB設計者だけではなくプログラマにもある程度の知識が最低限必要となりますが、インデックスについての初心者向け資料があまりないようです。 このスライドではプログラマに知っておいて欲しい以下の基的な点をまとめました。 INDEXを使用する時に気をつけること WHERE句 !=、<>はインデックスが使用できない WHERE句の全てのANDにかかっていないイン

    ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ