タグ

ブックマーク / www.techscore.com (25)

  • PostgreSQL VACUUM で年末大掃除 | TECHSCORE BLOG | TECHSCORE BLOG

    これは TECHSCORE Advent Calendar 2018 の18日目の記事です。 今回はPostgreSQLを運用する上で絶対に無視できない「VACUUM」について、その機能と役割を確認していきたいと思います。 VACUUMとは VACUUMは、テーブルの実体となるファイルの中から、不要領域を探索し、再利用可能な状態にしていくものです。VACUUMを全く実行しない場合、ファイルサイズが増え続け、パフォーマンスの低下、ディスクスペースの圧迫へとつながります。 AUTO VACUUM機能 PostgreSQLには「AUTO VACUUM」機能が搭載されており、自動で随時VACUUMが実行されるため、多くの場合問題となりません。しかし、AUTO VACUUMも万能ではありません。テーブルによって追加・更新・削除の頻度、規模は様々であるため、AUTO VACUUM機能によるVACUUM

    PostgreSQL VACUUM で年末大掃除 | TECHSCORE BLOG | TECHSCORE BLOG
  • [SQL] 6. テーブルの結合 3

    6.2. 自己結合 自己結合とは同じテーブル同士の結合のことをいいます。結合は 2つ以上のテーブルに対して行われますが、それらが別のテーブルである必要はありません。自己結合は 2つのまったく同じテーブルの結合として実行されます。 テーブルの自己結合を行う際に問題なのは、テーブルの名前も列の名前も全て同じだという点です。これを解決するために、テーブルに一時的な名前を付けます。この一時的な名前のことをエイリアスといいます。範囲変数または相関変数とも呼びます。sample.17-3 は、商品表の単価が同じである商品名と単価を表示するものです。 -- sample.17-3 -- /* テーブルの結合 */ SELECT A.商品名,A.単価 FROM 商品表 A,商品表 B WHERE A.単価 = B.単価 AND A.商品コード <> B.商品コード ; /* 実行結果 */ 商品名 単価

  • Redisにおけるデータの永続化 | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 Redis におけるデータの永続化についてです。 RDB と AOF Redis におけるデータの永続化には 2 つの方式があります。 一つは RDB ファイル(RDB = Redis DataBase だと思います)に書き出す方式で、あるタイミングのスナップショット(フルダンプ)です。 もう一つは更新系のクエリが逐次追記される AOF (Append Only File) です。 RDB と AOF は両方を有効にすることができ、その場合は RDB と AOF の両方が出力されますが、Redis 起動時には AOF からデータが復元されます。 RDB を保存する RDB ファイルを保存するには、save ディレクティブで保存するタイミングを指定します。

  • RedisにおけるRDBファイルのバックアップ | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 Redis におけるバックアップとリストアについて調べました。 データを永続化する方法については「Redisにおけるデータの永続化」で調べました。 RDB ファイルのバックアップ RDB ファイルでのバックアップ手順は以下のようになると思います。 BGSAVE コマンドを実行する(非同期での RDB ファイルの生成が開始される)。 RDB ファイルの生成が完了するまで待機する(完了したかどうかは、LASTSAVE コマンドの結果が変化したことや、RDB ファイルの i-node 番号が変化したことで判別可能です)。 (redis-check-dump で生成された RDB ファイルに問題が無いことを確認する。) RDB ファイルをコピーする(別サーバなど Redis が動作するサーバがクラッシュしても安全な場所に保管する)。 上記を一日一回など、定期的に実行します。

  • 3. ロケーションパス (2) 1

    3.1 ロケーションステップ 前回ロケーションパスの簡略な記述方法を説明しましたが、今回はロケーションパスの詳細な記述方法について説明します。 簡略な方法においてもロケーションパスは "/" で区切られた形で表されましたが、詳細な記述方法においてもその点は変わりません。実は、ロケーションパスは "/" で区切られた 1つ以上のロケーションステップと呼ばれる単位からなっています。そして、詳細な方法によるとロケーションステップは以下の 3つのパートからなります。 軸

  • あえていうほどでもないsed入門 | TECHSCORE BLOG | TECHSCORE BLOG

    「これsedでできるんだけど、どうやるんだっけ…」という状況ありますよね。 あなたのためにまとめておきました。 sedってなに? sedはファイルやパイプラインからデータを受け取り、なんらかの加工をして結果を返します。 マニュアルよるとsedは「stream editor」です。 sedの構文 GNUのマニュアルからの引用ですが、下記になります。

  • あえて言うほどではないけれども、awkの区切り文字について | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、河野です。 保守業務でログを分割して一部のフィールドを閲覧・集計することがありますが、そんなときはawkが活躍しますね。今回はawkの使い方を紹介します。 まずはawkの基をおさらい awkスクリプトの書式 awkは、何を実行するかawkスクリプトを記述する必要があります。

  • PostgreSQLでインデックスを効率良く利用しよう | TECHSCORE BLOG | TECHSCORE BLOG

    どうも、Benoîtです。 TECHSCORE Advent Calendar 2014 の 4 日目の投稿です。 PostgreSQLではいろいろなインデックス種類が存在する。使い方も様々である。インデックス種類の概要のあとに一番使われるB-treeインデックスの使い道や保守の話しを深めていく。 インデックスとは特定の項目を素早く参照できるようにするためのもの。B-treeインデックスに関してはソートに使うこともできる。 インデックスの種類 PostgreSQLはいろいろなインデックスに対応している。 B-treeインデックス、CREATE INDEX を利用するとデフォルトで選択されるインデックスである。Bの字はバランスの意味で、イメージとしてはtree(木構造)のroot(根)からleaf(最下層のノード)までの階層数がなるべく揃うようにバランスを取る。B-treeインデックスはどの

  • [SQL] 11. トランザクション 2

    SQL 11章 トランザクション 11.1. トランザクションの特性 11.2. コミットとロールバック 11.3. トランザクションの構文 11.4. 排他制御 11.5. ロック 11.6. トランザクションの定義 11.4. 排他制御 排他制御とは、あるトランザクションが実行中のときに、そのトランザクションが対象としているデータをロックし、他のトランザクションのアクセスを禁止することによって、データの整合性を確保しようとする仕組みです。トランザクションが完了すれば、ロックは解除され、他のトランザクションはデータにアクセスできるようになります。 例えば、あるお店の在庫管理テーブルに商品が 30個登録してあるとします。販売員 P さんが商品 A を 15個販売し、ほぼ同じ頃に販売員 Q さんが商品 A を 5個販売しました。このとき、二人の販売員が在庫管理テーブルのデータを更新しようと次

  • Ruby2.0のModule#prependは如何にしてalias_method_chainを撲滅するのか!? | TECHSCORE BLOG | TECHSCORE BLOG

    Ruby2.0のModule#prependは如何にしてalias_method_chainを撲滅するのか!? お久しぶりです。寺岡です。 lazyについて書いた前回に続いて、Ruby2.0について書いてみたいと思います。 今回注目する新機能は、Module#prependです。 Module#prependはRuby2.0で新たに追加された、Module#includeの親戚のような機能です。 一言で表すと「クラスの継承階層の手前にモジュールを追加する」ことができるようになります。 ActiveSupportのMudule#alias_method_chainを使わずに綺麗なモンキーパッチ実装することができる、Module#prependの挙動を探ってみたいと思います。 ruby2.0-rc1のインストール まずは実行環境の準備です。 前回の記事ではruby2.0-preview2を使い

  • [SQL] 16. データベースの設計 2

    16.3. 正規化 正規化は優れたデータベースを構築するには必須の概念です。正規化とは、実世界の事象や情報を、データベース上で効率よく利用できるようにモデル化することや、その手順のことを言います。リレーショナル型データベースでは、複雑なテーブルを特定の規則に従って単純なテーブルに分割することが正規化であるといえます。 まだ正規化されていないものを非正規形、正規化されたものを正規形といいます。正規形には、正規化の程度により、第一正規形から第五正規形まであります。ほとんどの場合、第三正規形まで正規化すれば的確な正規化がなされたとしてよいとされています。ここでも第三正規形までについて説明します。 正規形の説明の前に、重要なキーワードについて説明します。 関数従属性 ある列の値 X が決まると同時に、別の列の値 Y が自動的に決まるとき、Y は X に関数従属であるといいます。Y が X に関数従

    d_animal141
    d_animal141 2016/02/14
    データベースの設計
  • Ruby 2.2.0 preview1: ついに来ました!恒等関数 Kernel#itself などなど | TECHSCORE BLOG | TECHSCORE BLOG

    Ruby 2.2.0 preview1: ついに来ました!恒等関数 Kernel#itself などなど こんにちは、鈴木です。 先日(2014/9/18)に Ruby 2.2.0 preview1 が出ましたね! Ruby 2.2.0-preview1 リリース いくつか新しい機能も増えていたので、気になったものをご紹介します!(詳細な変更内容はこのページで確認することができます。) ついに来ました!恒等関数: Kernel#itself いわゆる恒等関数と呼ばれる、自身 (self) をそのまま返すメソッド Kernel#itself が追加されました。 他の言語でも恒等関数が組み込みで存在する場合があり、id や identity などの名前で定義されていることが多いです。「名前重要!」の Ruby では恒等関数の導入案は以前からありましたが、名前がなかなか決まらなかったという経緯が

    d_animal141
    d_animal141 2016/02/09
    ruby 2.2.0 preview1: ついに来ました!
  • Railsで変更前の値、型変換前の値、などなど | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 ActiveRecord は使い勝手の良いライブラリです。 ActiveRecord::Base クラスを継承するだけで、ほとんど設定することなく、その恩恵に預かることができます。 今回は、そのありがたい恩恵の中から、属性に代入した値に関する部分をピックアップします。 具体的には、型変換前の値が取得できること、属性の変更前の値を知ることができることなどをご紹介します。 例として User というモデルがあり、年齢を数値型で保持する age という属性があるとします。 Rails の ActiveRecord はデータベースにおけるカラムの型に応じて、代入された値を型変換してくれます。 例えば、数値型の age に "123" という文字列を代入したとします。

    d_animal141
    d_animal141 2015/01/17
    Railsで変更前の値、型変換前の値、などなど TECHSCORE BLOG
  • Railsライブラリ紹介: N+1問題を検出する「bullet」 | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 Rails の便利なライブラリをシリーズでご紹介してみたいと思います。 今回は「N+1 問題」を検出してくれるライブラリ、bullet です。 bullet (http://github.com/flyerhzm/bullet) N+1 問題 N+1 問題とは、OR マッパーを使用しているときに発生しがちな問題です。 何かの一覧画面を作成しているときに、 一覧に表示するデータを取得するために SELECT を 1 回実行(N レコード返される) 各データの関連データを取得するために SELECT を N 回実行 データベースアクセス(SELECT)が合計 N+1 回も実行される(JOIN して 1 回の SQL で取得した方が効率的) というものです。 具体的なコードで考えてみましょう。 例として店舗の一覧画面を作成しているとします。 関係するモデルは以下の通りです

    d_animal141
    d_animal141 2014/07/08
    Railsライブラリ紹介: N+1問題を検出する「bullet」
  • ActiveSupport の便利メソッド: try, blank?, present?, presence | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 便利なメソッドやイディオムの存在を知ってしまったときの楽しさは、Ruby/Railsを使う理由の一つではないでしょうか。 今回は、便利メソッドの宝庫 ActiveSupport からいくつかご紹介したいと思います。

    d_animal141
    d_animal141 2014/05/13
    ActiveSupport の便利メソッド
  • Rails 4.1.0 で追加された Module#concerning と関心事の分離 | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 Rails 4.1.0 で Module#concerning というメソッドが追加されました。 Module#concerning とは Rails 4.0 で concerns ディレクトリが追加されたことを覚えているでしょうか。(see 「2.4. concerns ディレクトリの導入」) concerns ディレクトリに Mixin 用のモジュールを置いて、それをモデルなりコントローラなりで include する、という使い方をするものですが、Module#concerning を用いると、わざわざ concerns ディレクトリにファイルを作成せずに、モデルクラスの中に記述することができます。 コードで表すと、Rails 4.0 では以下のように書くことができるようになりました。 # app/models/article.rb class Article

    d_animal141
    d_animal141 2014/05/11
    Rails 4.1.0 で追加された Module#concerning
  • Rails 4.1.0 の ActionPack Variants でデバイスごとのViewを表示する | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 Rails 4.1.0 で追加される ActionPack Variants を使ってみます。 ActionPack Variants とは ActionPack Variants とは、デバイスごとに View を切り替えるために導入された仕組みで、コントローラで request.variants に適当な値(例えば :tablet)を設定しておくと、それに応じた View ファイル(例えば index.html+tablet.erb)が使用される、というものです。 これを利用することで、デバイスごとに使用する View ファイルを切り替えることが簡単に実現できます。 ActionPack Variants を使う それでは ActionPack Variants を使ってみます。 やることは簡単で、コントローラで request.variants に適当な値を設

    d_animal141
    d_animal141 2014/04/24
    Rails 4.1.0 の ActionPack Variants でデバイスごとのViewを表示する
  • Rails: alias_method_chain: 既存の処理を修正する常套手段 | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 既存のメソッドの動作を少しだけ変更したい、という場合に使われる常套手段をご紹介します。 とあるシステムのログ出力モジュール とあるシステムでログ出力機能が必要になり、以下のような Logging モジュールを作成したとします。

    d_animal141
    d_animal141 2014/04/12
    Rails: alias_method_chain: 既存の処理を修正する常套手段
  • Railsのコールバックまとめ | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 Techscore 体の記事の下書きを書き進めています。 ということで、コールバックの記事の下書きを公開します。 コールバックの種類 コールバックとは、バリデーションの実行やデータベースへの保存などのタイミングで処理を行うための機能です。 あるタイミングで必ず実行する必要がある処理をコールバックに指定することで、モデルの一貫性を保つことができます。 Rails のコールバックの種類をまとめてみると、非常に多いことが分かります。 after_find 検索メソッドでオブジェクトが見つかったタイミングで実行されます。 検索条件を指定せずに all メソッドを呼び出すなど、検索結果が大量になる場合は注意が必要です。 検索結果の数だけコールバックが実行されますので、パフォーマンスに重大な影響を及ぼす可能性があります。 after_initialize オブジェクトがインス

    d_animal141
    d_animal141 2014/04/12
    Railsのコールバックまとめ
  • SQL -TECHSCORE-

    ここでは、リレーショナル型データベースを操作するために必須となる世界標準言語 SQL について、基礎から応用まで詳しく説明しています。 また、SQL のみにとどまらず、リレーショナルデータベースマネージメントシステム (RDBMS) の持つ様々な機能について詳しく説明しています。 最後には、データベースの設計に関する非常に重要な考え方についても触れていますので、これらを全て学習すると、データベースの操作から設計まで幅広い知識を身につけることができるでしょう。 SQL INDEX 1. データベースの概要 1.1. データベースとは 1.2. データベースシステムの特徴 1.3. データベースとファイルの違い 1.4. 代表的なデータモデル 1.5. リレーショナル型データベース 1.6. まとめ 2. SQL 2.1. SQL歴史 2.2. SQL とは 2.3. SQL の機能 2.

    d_animal141
    d_animal141 2014/03/29
    データベース | TECHSCORE(テックスコア)