アーカイブ

‘データベース’ カテゴリーのアーカイブ

MySQLでdatetime型のカラムから日付データを取り出すメモ

2010 年 8 月 20 日 takus コメントはありません



タイトルの通り、
MySQLを使っていて、日ごとの集計データを取りたい時など、datetime型のカラムから日付を取ってきたい場合がよくある。
そんな時に使えそうな情報を見つけたのでメモ。

datetime型のカラムから日付データを引っ張ってくる際の高速化

このサイトによると、

SELECT * FROM item WHERE 'datetime' LIKE '2010-06-23%';
 
SELECT * FROM item WHERE 'datetime' >= '2010-06-23 00:00:00' AND 'datetime' <= '2010-06-23 23:59:59';


こんなクエリを投げるとインデックスが効かないらしい。
これを書き換えて、

SELECT * FROM item WHERE 'datetime' BETWEEN '2010-06-23 00:00:00' AND '2010-06-23 23:59:59';


と書くとdatetime型のインデックスが有効になって高速化できるとのこと。

ひとまずこれを使っているが、実はまだベンチマークはしていない…(汗)

カテゴリー: データベース タグ:

NoSQL Cassandraを使ってみる ~Rubyでアクセス編~

2010 年 7 月 30 日 takus コメントはありません

NoSQL Cassandraを使ってみる ~インストール編~
においてインストールから、コマンドラインでの値の取得について説明した。今回はその続きとして、RubyからCassandraにアクセスして値を取得してみる。


Rubyでアクセスするためのライブラリをインストール

なお、CassandraはThriftという言語バインダ用のライブラリを介してアクセス用のライブラリを提供しおり、ほとんどの言語からアクセス可能である。Rubyの場合は、これをRubygemsからインストールできる。


$ su
$ gem install cassandra

Rubyでアクセスしてみる

前回保存した値を取得して、標準出力に出力するコードは以下のようになる。


#!/usr/bin/ruby
require 'rubygems'
require 'cassandra'
include Cassandra::Constants
keyspace1 = Cassandra.new('Keyspace1')
keyspace1.get(:Standard1, 'jsmith') .each do | column, value |
puts "#{column} = #{value}"
end

保存したら実行してみる。

$ ./ruby_access.rb
age = 42
first = John
last = Smith

思ったより簡単に値を取得できた。しかし、まだアプリケーションを作る際に具体的にどのようなデータ構造にするのがいいのか想像がついていない。

カテゴリー: データベース タグ: ,

NoSQL Cassandraを使ってみる ~インストール編~

2010 年 7 月 29 日 takus コメントはありません

Cassandra入門と、さらに詳しく知るためのリソース集 ? Publickey
こんな記事が上がっていて、Cassandraにも興味が出てきたので触ってみた。

Cassandraって?

Cassandraは最近流行りのNoSQLの一つ。Facebookで大規模データ処理のために開発されて、現在はオープンソースとなって、Apache Software Foundationのプロジェクトとして開発が進んでいる。イマイチ理解はしきれていないが、多次元のデータが保持できるKey-Valueストアという認識をしている。ちなみに、SQLの用語と比較すると
データベース → キースペース
テーブル   → カラムファミリー
主キー    → key
カラム    → カラム
と対応づけられるようである。参考:みてわかるクラウドマガジンvol.1 (日経BPパソコンベストムック)



インストール

CassandraはJavaで実装されているのでプラットフォームには非依存。(Ver.は1.6以上が推奨)
今回はFedora12 x86_64にインストールしてみた。

$ which java
/usr/bin/java
$ java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8) (fedora-39.b18.fc12-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
$ su
$ cd /usr/local/src
$ wget "http://www.meisei-u.ac.jp/mirror/apache/dist/cassandra/0.6.2/apache-cassandra-0.6.2-bin.tar.gz"
$ tar -zxvf apache-cassandra-0.6.2-bin.tar.gz

バイナリで配布されているので解凍したら特にコンパイルする必要もない。

実行

早速、実行してみる。


$ cd apache-cassandra-0.6.2
$ ./bin/cassandra -f

メッセージがいくつか表示されて起動した。クライアントも容易されているので接続してみる。デフォルトではKeyspace1というキースペースとその中に4つのカラムファミリーがあり、外部から接続するポートは9160に設定されている。ちなみにこれらの設定は、conf/storage-conf.xmlに記述されている。

$ /usr/local/src/cassandra/bin/cassandra-cli --host localhost --port 9160
Connected to: "Test Cluster" on localhost/9160
Welcome to cassandra CLI.
Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.
cassandra> set Keyspace1.Standard1['jsmith']['first'] = 'John'
Value inserted.
cassandra> set Keyspace1.Standard1['jsmith']['last'] = 'Smith'
Value inserted.
cassandra> set Keyspace1.Standard1['jsmith']['age'] = '42'
Value inserted.
cassandra> get Keyspace1.Standard1['jsmith']
=> (column=6c617374, value=Smith, timestamp=1280391013700000)
=> (column=6669727374, value=John, timestamp=1280390971929000)
=> (column=616765, value=42, timestamp=1280391004923000)
Returned 3 results.

setでデータを保存し、getでデータを取得することに成功。せっかくなのでこれでちょっとしたアプリケーションを作ってみたいと思っている。

参考サイト

アグレッシブエンジニア: cassandraに挑戦 その2 インストール

カテゴリー: データベース タグ: ,