「MySQL」カテゴリーアーカイブ

MySQLの設定など

SunがOracleに買収される!

a

 しかし、Oracleは買収がめっちゃうまいね。うちの会社にもIBMでDB2周りをやっていた人がいるんだけど、DB業界の人に言わせると、(DB業界の)かなりいい会社を買収して、うまいこと立ちまわっていると言う。

 たしかに、IBMのDB2やMicrosoftのSQL Serverはどちらも、大企業の一事業でしかないので、両社が他の事業の収益を回して、Oracleを叩きつぶすために格安でDBを提供する戦略をとれる(やっている?)にも関わらず、OracleはDB事業を会社の中核に据え、しかも超高収益企業としてIBMやMicrosoftに打ち勝っている。

 日本でも高配当企業として有名ですが、今までソフトウェアしかやってなかった会社だけに、世界第4位のサーバー企業を手に入れたのは面白いですが、ハードウェア事業は一歩間違うと不採算事業になりかねないので、ぜひともハードウェアに走りすぎずに、高収益体制を守ってほしいと思います。

 とりあえず、うちとしては、MySQLとJavaの行方が心配です。。。当面は、Sunを子会社としてブランドを残すんですかね?

Databaseの移動

 以前から放置していた、社内ブログ(wordpress)のDB(MySQL)を移行したのですがめちゃくちゃハマりました。

 もともとそのサーバには、他にもサービスが同居していた事もあり、MySQLにメモリを多めに割り当てていたのですが、そのサービス達も別のサーバに移行したため、ブログのためだけに大量のメモリを確保するDBが存在する事になってしまいました。

 データセンターに太い回線を引き込んでいる共用のDBサーバがあるので、ブログのDBもそちらに移行する事に決定。

 まぁ、DBの移行だからすぐに終わるだろうと思い、DBのダンプをとり、共用DBにリストア。さらにアクセス用のアカウントを作成。コンソールからネットワークを超えてアクセスしようとすると、反応が返ってこない。 続きを読む Databaseの移動

EJB(CMP)でBlobデータを扱う方法

 久しぶりにハマりました。

 今まで、SOBA CITYやSOBA mierukaで利用するバイナリデータはディスクスペース(Apacheアクセス領域)で管理していたのですが、データ自体をデータベースで取り扱うようにした方が、管理が楽になるのと、あまり難しい事を考えずにクラスタリングできるようになるとの理由から、バイナリデータをデータベースに押し込む事にしました。

 まず、データをDBに押し込む事は難なくテーブルにBLOB型のカラムを用意してやり、JDBC経由でDBに押し込む。サンプルは、SOBAフレームワークで利用するキーストアをDBに押し込むコード片です。

String sql = “INSERT INTO keystore2s (id, sessionKsr, sessionTks, userKsr, userTks) ”
+ “VALUES (?, ?, ?, ?, ?)”;

PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, strId);
ps.setBinaryStream(2, sessionKsr, sessionKsr.available());
ps.setBinaryStream(3, sessionTks, sessionTks.available());
ps.setBinaryStream(4, userKsr, userKsr.available());
ps.setBinaryStream(5, userTks, userTks.available());

ps.executeUpdate();

 昔、hibernateが出たての頃にプリミティブ型で表現できないような型はすべてObjectにしかマッピングできなかったという嫌な記憶があり、EJBでもBlob型はObject型にマッピングするのだと勝手に思い込み、実行時に以下のようなマッピングエラーに遭遇し調査に時間がかかりました。

java.sql.SQLException: Unable to load to deserialize result: java.io.StreamCorruptedException: invalid stream header

 EJBでは難しいこと考えずに、単にbyte[]型に直接マッピングできました。

 サーブレットでデータを出力するには、HttpServletResponse#getOutputStream()で、ServletOutputStream を取り出し、ServletOutputStream#write(byte[] data)で出力すればok

 Content-Typeは特に必要ありませんが、気になる方は「text/plain」を指定したら良いですよ。