エンジニアが発信する【その他DBMS】の記事を集めました

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【その他DBMS】

2010年05月27日

リニアにスケールできる?SQLデータベース

なんかすごいのが登場しましたね・・・。名目上リニアにスケールできるSQLデータベースVoltDB」。

インターネット上のサービスだったらNoSQLという選択肢はあるのかもしれませんが、エンタープライズレベルだとどうしても難しい。このデータベースだと今までのシステムの延長で構築できるかもしれませんね。

RDBMSといわないところがポイントなのかな?Webサイトには「Next generation SQL RDBMS」と銘打っていますが。
また休日においかける要素が増えたかもしれないなー。

「NoSQL」を上回る性能を目指す次世代型高速SQLデータベース「VoltDB」登場 - ITmedia エンタープライズ

2010年05月09日

メインフレーム(大型汎用機)

このブログの訪問者を分析すると、意外に「汎用機」というキーワードがあった。

汎用機関係を本題として記事を書いた覚えはないし、それほど多く使っている言葉でもない。それでも到達する、ということは、インターネット上にほとんど情報がないのではないか?と思う。

確かに昔、汎用機の書籍がないかと思い、本屋を巡ったことはあったが、全くと言っていいほど見かけることができなかった。記憶にある限り、2冊だけある。
ひとつは「VSAM」というタイトルがでかでかと書かれていた書籍。記憶では5,000円くらいだったような気がしている。川崎市の溝の口の文教堂だったと思う。
おそらく下記書籍ではないか。

VSAM―アクセス方式サービスとプログラミング技法/J. マーチン

¥7,035
Amazon.co.jp


もう一冊はDB2の本。以下の書籍で、東京都渋谷の書店(店名がうろ覚えだが、Book First)で購入した。

DB2入門/C.J. デート

¥7,875
Amazon.co.jp


いずれにせよ、会社にあったマニュアルで十分に役に立った、という覚えがあるが、専門書以上に難解なので、ある程度下地の知識が必要である。

コンピュータがこれだけ安くなってしまったら、汎用機はもう役目を終えてしまうのかも知れないが、検索されてくる=ニーズはある、ということである。

是非、会社にあるであろうマニュアルをしっかり読むことをお勧めする。

ただし、システム移行の場合はそうはいかないかもしれない。汎用機の知識を持っている人も相当減っているので、検索せざるをえないのかもしれないが、その場合も「汎用機を所有している会社」にはマニュアルはあるはずなので、それを利用することをお勧めする。

2010年04月21日

Ruby on Rails でSQLファイルを外に出す方法。

Ruby on RailsでSQLファイルを外に書きだす方法が意外と無い。

そもそも需要が無いのかもしれない。


なので仕方なく、SQLを外だしにするコードを書いたのだが・・・

あれから約一年。未だに需要が無いのかプラグインらしきものが見つからない。

と言う事で、僕のように困ってる人のヒントになれればと思って僕のコードを公開してみます。もし需要があれば僕自身用に作ったプラグインを公開してみます。


ちなみに・・・

コードの詳しい説明は割愛しますが、簡単に挙動を書いておきます。

(久々に技術系の記事書くなぁ。。。)



-------------------------------------------------

DBと密接に関係するのはモデルであるため、モデルにDB毎のコードを書けるようにしました。
例えば、「database.yml」の「adapter」に「mysql」と記載していた場合に「User」モデルでDB毎に違うSQLを発信したいとします。

app/\/imodels/\/imysql/\/iuser/\/i


この場合は上記のフォルダを作成してください。
modelsまでは設定ファイルで変更することが可能です。
その下のフォルダはアダプター毎に変更する必要があります。
今回の場合は「mysql」なので「mysql」フォルダを作成します。

そして、最後に「User」モデルに対しては「user」(小文字)フォルダを作成します。
これで格納する配置準備が出来ました。

注意:本コードは内部的にダブルクォーテーション(")を使用しているため、SQL内部ではダブルクォーテーション(")を使用しないでください。
※シングルクォーテーション(')を使用してください。

■find_sql_***

さて、その次にtest.sqlを作成したとします。

[test.sql]
select * from user


※他の処理との相性が悪くなる場合があるので、最後に「;」は付けない事を推奨。
これを先ほどの箇所に格納すると

1 [controller]
2 user = User.find_sql_test
3 user.each{ |u|
4 
5 }


と言うコードが作成されます。戻り値は必ず配列型になります。
(※find_by_sqlを使用しているので、挙動はfind_by_sqlと同様になります。) また、バインド変数を使用する場合は

[test.sql]
select * from user where id = :id


として、

1 [controller]
2 user = User.execute_sql_test({:id => 1})
3 user.each{ |u|
4 
5 }


としてください。

■execute_sql_***

find_sql_***と同様にexecute_sql_***も存在します。
処理はSQLを発行する場合に使用してください。

[test.sql]
update users set mail_address = :test


1 [controller]
2 User.execute_sql_test2({:test => 'test'})
3 
4 }

のように使用してください。

■execute_rb_***

DB毎にプログラムを変えたい場合があると思います。
まずは、test.rbを上記同様userフォルダの下に配置します。
その場合は以下のように記述してください。

1 [test.rb]
2 return "test" 


def等の関数宣言は要りません。
これを呼び出す場合は

1 [controller]
2 p User.execute_rb_test


とします。 もし、引数を渡したい場合は
呼び出し側は

1 [controller]
2 p User.execute_rb_test({:id => "テスト"})


と記載することで値を渡す事が出来ます。 受け取り側は

1 [test.rb]
2 return hash[:id] + "だよ!" 


で使用できます。(hashというインスタンスを用意しております。)




ModelにMix-inして使ってください。

Module名は適当に付けてincludeしてください。


以下、コードになります。

----------------------------------------------------------


##
# SQL格納フォルダを取得します。
#
MODEL_ADAPTER = SQL_FOLDER + read_yml_file("config/database.yml")[RAILS_ENV]["adapter"] + "/"


##
# ファイルの読み込みコストを考えてSQLファイル等をメモリキャッシュする。
#
MODEL_SQL = {}


##
# YML情報ファイル読み込み
#
def read_yml_file(fileName)
# 初期化されていない場合は初期化する。
@ymlhash = {} unless @ymlhash

# 同じファイルは読みこまない。
return @ymlhash[fileName] if @ymlhash[fileName]

# YMLファイルの読み込み
@ymlhash[fileName] = YAML::load_file(fileName)
end

module Model


##
# インクルード時の処理
#
def self.included(base)

# モデルにSQLファイルを付加する。
set_sql(base)

end


private


##
# SQLファイルをモデルに設定します。
#
def self.set_sql(base)
base_dir = MODEL_ADAPTER + base.name.underscore
unless MODEL_SQL[base.name]
# 一度読み込んだファイルは二度と読み込まないようにハッシュを定義する。
MODEL_SQL[base.name] = {}

# ディレクトリの存在チェックを行う。
Dir::entries(base_dir).each{ |file_name|
# 拡張子がSQLとRBのもののみ読み込む
extension = self.get_file_extension(file_name)
if extension == "sql" || extension == "rb"
# ファイルを読み込みハッシュに格納します。
open(base_dir + "/" + file_name) {|f|
MODEL_SQL[base.name][file_name] = f.read
}
end
} if FileTest.exist?(base_dir) && File::ftype(base_dir) == "directory"
end


# 定義されているメソッドを追加します。
MODEL_SQL[base.name].each {|hash|
extension = get_file_extension(hash[0])
method_name = get_filename_noextension(hash[0])

if extension == "sql"
extend_code = %-
class << base
def find_sql_#{method_name}(hash = {})
return self.find_by_sql(["#{hash[1]}", hash])
end

def execute_sql_#{method_name}(hash = {})
return connection.execute(sanitize_sql(["#{hash[1]}", hash]))
end
end
-
elsif extension == "rb"
extend_code = %-
class << base
def execute_rb_#{method_name}(hash = {})
#{hash[1]}
end
end
-
end
# p extend_code
eval extend_code
}

end


##
# ファイル拡張子を返却
#
def self.get_file_extension(fileName)

# 拡張子よりも短いファイル名は不正
return nil unless fileName.rindex(".")

# 拡張子(小文字)を取得する。
extension = (fileName[fileName.rindex(".") + 1..fileName.length]).downcase

# 拡張子を返却します
return extension
end


##
# ファイル拡張子以外を返却
#
def self.get_filename_noextension(fileName)

# 拡張子よりも短いファイル名は不正
return fileName unless fileName.rindex(".")

# 拡張子以外を取得する。
return (fileName[0..fileName.rindex(".") - 1])
end

end

----------------------------------------------------------


他に良い方法があったら教えてください。

一応これで、SQLファイルを隠ぺいした上に普通のメソッドを呼び出すようにSQLファイルを読み込んで実行できます。

また、キャッシュも効いているのでSQLファイルを何度も読みだす事はありません。


P.S.

フォルダの形式はDOMAっぽくしたいと最近思うようになりました。。。

必要があれば変えるかもしれません。


PostgreSQLを使ってる人で、開発環境がWindowsで本番環境はLinuxの人は一工夫が必要なので注意。

同じテーマの最新記事

2010年03月15日

汎用機DBのテーブル定義書作成ツール~1

某金融機関の開発基盤整備ということをやっていたときの話。

IBMの汎用機で、REXXやCOBOLでツールを作ったり、データをPC側に落として加工するような処理などを手がけていた。
その中で「毎年データベースのテーブル定義書を納品しているが、その作業に毎回1ヶ月半ほどかかっており、さらに会議室をひとつ占有するので、何とかならないか」という話が持ち上がった。


要望としては、なるだけ手作業は避けたい、納品は印刷して行うのでファイル形式は何でもよい、とのことであった。


IBMのDB2の仕様で、どのテーブルにテーブル定義が入っているかは分かっていた。これをCSV等に抜き出して、PC側に落としてExcelのフォーマットに加工する、というくらいならそう難しくない。しかし、やるならもっと手作業の介在を減らしたい。そう、ツールの画面からワンタッチでCSVを作ってダウンロードして、加工して、という一連の操作をすることで手作業を極力減らせないかと周囲に相談してみた。

するとデータベース周りを担当してるチームから
・汎用機のデータ取得はPC側から直接可能である。
・PCから汎用機のDB直接アクセスできるツールもある。
という情報を耳にした。
同じテーマの最新記事

2010年02月24日

Twitter、データベースをMySQLからApache Cassandraへ

TwitterがデータベースをMySQLからApache Casandraに移行しますMyNoSQLのインタビューで明らかになったものです

それはそうですよねー。Twitterも大規模システムに発展していきましたから。
システム開発も最初はRoRで実現し、その後変更していった。そしてついにデータベースがネックになったということです。
RDBMSからNoSQLのApache Casandraへということでしょうか。コンシュマーサービスのあちこちでNoSQLが増えてきていますね。

NoSQLという言葉は先日のdevsumi2010で解説があったので今ならよくわかる。まさにdevsumiさまさまです。

2010年01月20日

富士通、RDBMS「Symfoware Server V10」を販売開始

Symfoware Serverは従来から販売はされていましたが、今回最新版「V10」のリリースを発表。
なんといっても直前に稼動した東証の"arrowhead"に採用されているものというのは大きなアピールになるものと思います。
 今までまったく見たこともないものなのですが、やっぱりちょっと気になりますね。

富士通、東証arrowheadでも稼働するRDBMSの最新版「Symfoware Server V10」を販売開始 - ITmedia エンタープライズ







リレーショナル・データベースシステム RDBMS技術解説

リレーショナル・データベースシステム RDBMS技術解説

  • 作者: 滝沢 誠
  • 出版社/メーカー: ソフトリサーチセンター
  • 発売日: 1996/12
  • メディア: 単行本


2010年01月08日

新人OLと学ぶ5分でわかるDB2講座

Untitled

新人OLと学ぶ5分でわかるDB2講座

DB2 には興味ないのに見てしまいました。
10 回シリーズの最後にはこちら向いてくれることを希望。。。って何言ってるんだか。

2009年12月17日

[db][ide] Oracle SQL Developer 2.1 リリース

データベース開発ツール Oracle SQL Developerの最新版 2.1がリリースされました。数ヶ月前にリリースされたEA (早期アクセス版) ではなく、製品リリースです。 新機能には、PL/SQLの単体テスト (ユニット テスト) 機能や、Data Modeler Viewer (データモデリング ツール Oracle SQL Developer Data Modelerの参照機能のみ) の組み込みなどがあります。 ダウンロードや関連情報は、OTNの製品ページ (英語) からどうぞ。 O ...

2009年12月10日

[db][ide] Oracle SQL Developer Data Modeler 2.0 Patch 1 リリース

データベース モデリング ツール Oracle SQL Developer Data Modeler の2.0 Patch 1 (2.0.0.584) がリリースされています。ダウンロード、リリースノート、修正バグ一覧などは、OTNの英語ページから。 OTN > Oracle SQL Developer Data Modeler http://www.oracle.com/technology/products/database/datamodeler/ (英語) http://www ...

2009年11月28日

Symantecへの攻撃、情報流出はなさそう!?

先日攻撃を受けたSymantecのサイト、Symantecによると情報流出はなさそうとのこと。
ちょうど被害にあったのが日本・韓国向けのサイトだったので国内に情報流出被害があるのでは、とも思われたのですがデータが暗号化されていたため大丈夫だったようです。

 # 「データが暗号化されていたから大丈夫」というところには若干ひっかかるものがありますけど・・・

まだ調査は継続しているそうなので、一応は正式発表待ちというところでしょうか。

Symantecの日韓ユーザー向けサイトに不正アクセス、情報漏えいはなし - ITmedia エンタープライズ



よりによって・・・Symantecのサイトが攻撃の被害に
セキュリティソフトのメーカだからこそ狙われるのでしょうか。
シマンテックのウェブサイトがブラインドSQLインジェクション攻撃の被害に。

被害を受けたのは『被害を受けたのは日本および韓国のNorton製品ユーザーのサポートに利用されるウェブサイト』・・・よりによって日本向けのサイトか・・・。

さすがのシマンテックも「参った」でしょうね・・・。

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【その他DBMS】

メンバー紹介

タグパネル

ランキング

エンジニアが作る最新ITブログ DODA