実は最近ちょっとDBIx::Classぐりぐりしてたんですけど、かなりいい感じです。 次からプロジェクト組むときは Class::DBI じゃなくて DBIx::Class にしてみようかなってくらい。 てわけでちょっとずつ比較。チラシ裏モードで書きなぐり。 まず Class::DBI でのページング処理の問題について。 Class::DBI では Class::DBI::Pager が有名ですが、これは検索条件に該当するものを 全部 fetch してきた... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
『 すでにあるMyApp::View::TTを
usebase'Catalyst::View::TT::ForceUTF8';
として継承関係を変ればOK。 』 [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
チャリンコ通勤による滝のような汗で、朝からTシャツがシースルーになってしまうmikioです。さて今回は、Tokyo Cabinet(TC)のデータベースを各種のアルゴリズムで圧縮して利用する方法についてご紹介します。 圧縮B+木 B+木とは、比較関数の値による順序が近いレコード群を単一のページにまとめ、各ページにB木(multiway balanced treeの略であり、二分木(binary tree)とは違います)... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
Perl では、DBI を使って DB にアクセスするのが一般的である。 最近では DBIx::Class や Class::DBI といった O/R Mapper を使うことが多いのだが、これらも内部で DBI を呼んでいる。 CDBI や DBIC を使っている時には DBI のレベルのことはほとんど考えなくてもよいのだが、DBI のレベルでのテクニックも知っておくと便利なことが多いのだ。 DBI には、DBI::Profile というモジュールがあって、こ... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
TheSchwartz は mysql に job を溜める simple な job queue なのです。 worker.pl 実際に仕事をするひとです。Job を Queue から Pull します。 package MyWorker; use strict; use warnings; use base qw( TheSchwartz::Worker ); use Data::Dumper; sub work { my ($class, $job) = @_; # $class は単に class.blessed object じゃない。 print "Workin' hard or hardly workin'? Hyuk!! @{[ Dumper($job->arg) ]}\n"; $job->completed(); } package main; use strict; use warnings; us... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
Perlネットワークプログラミング―ソケットの使い方からクライアント/サーバーシステムの開発まで を読んでたら Chatbot::Eliza を使った簡単なスクリプトを、inetd 経由で動かしてデーモンとして動かすみたいな話がありました。inetd はその中で、標準入力や標準出力をクライアントとのソケットへ再オープンして、指定されたコマンドをデーモンとして実行するので、標準入出力を... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
|
DBIx::Classでの集約関数(sum,avg,max,min,count,...)の使い方 searchの第二引数のハッシュリファレンスに、selectとasを指定する。 selectには集約関数とその引数(普通の列が欲しければその名前も)、asにはそれにつける名前を指定。結果はget_column('名前')で得る。 (Schemaのadd_columnsで指定されてる名前ならget_columnは必要ない。) $resultset->search({ #where句の条件 }, { select => [ "列名", # nameと... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
いま作っているWebアプリで、Class:DBIをはじめてきちんと使った。 いろいろとPluginを使ったのでメモ。 ベースクラスには、 package Object; use strict; use base qw(Class::DBI::mysql); use Class::DBI::AbstractSearch; use Class::DBI::Plugin::NoCache; use Class::DBI::Plugin::AbstractCount; use Class::DBI::Plugin::RetrieveAll; use Class::DBI::Plugin::Iterator qw(prefetch=>10); use Class::DBI::Pager; __PACKAGE__->nocache(1); __PACKAGE__->connection(...); こん... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
|
DBIx::Classのリレーションのモデルを日本語で解説してくれているサイトが見つけられなかったので、自分で調べてまとめてみた。 間違ってるかもしれない。特に1:1のhas_one(might_have)とbelongs_toのあたりが不安。 Catalyst::Model::DBIC::Schemaを使うときも当然同じ。 Ruby on RailsやClass::DBIではbelongs_toがhas_aになるらしい。 1:1 互いにhas_oneの例 CREATE TABLE User ( user_id text primary key, password text, .... ); C... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
すこし前にはてなスターのリリースがされたのですが、サービス開始直後にありがちなことに、時々負荷で遅くなったり、アクセスしにくくなったりしてしまいました*1。これではいけない、ということで、すぐ次の日に、バックエンドのサーバを一気に10台近くまで増やして、おおむね快適に使える状態になっていると思います。この時に、新しいサーバをまっさらな状態から、... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
|
を使うと超ラクチンです。 ここでは、サーバーにモジュールをインストールするためのツール、CPANの設定方法と、その使い方を解説します。 このセクションは、Linuxサーバー向けに書かれております。 CPANとは 「モジュール(機能のかたまり)」を簡単にインストールしてくれるシステムです。* 自動的に、モジュールの最新ソースファイルを取って来て、コンパイルし、インス... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
サーバのチューニングをする上でかなりやっかいなのがデータベース系。特にログファイルの量が膨大になると後から中身を見て問題を分析するのも一苦労という場合が。そんなときにこのMySQL用topコマンド「mytop」を使えば一体何が起きているのかがすぐにわかるので問題点の把握が容易になります。ベンチマークするときに併用すればかなり効率が良くなるのではないかと。 イ... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
|
今回は、前々回 DBIx::Simple を紹介した際に予告した本格 O/R マッパーモジュール DBIx::Class (略称 DBIC)を紹介します。 Perl の世界では、昔から Class::DBI (略称 CDBI)という優れた ORM モジュールがあり、プロダクションでもがりがり使われてきました。CDBI をより便利にする拡張もたくさん現れ、中でも Class::DBI::Sweet というモジュールがよく使われていました。この CDBI::Sweet の作者... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
typester さんに以前教えて頂いたんですが,似たようなことに今日遭遇したのでメモ。 WHERE field1 IS NOT NULL な検索をしようと思って, $resultset->search({ field1 => 'IS NOT NULL' }); と書くと,内部的には SELECT ... WHERE field1 = ? と展開されて,プレースホルダに「IS NOT NULL」が渡されるので,バツ。 $resultset->search({ field1 => { 'IS NOT' => 'NULL' } }); は SELECT ... WHERE field1 ... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
Filter::SQL 作った - id:kazuhookuのメモ置き場にある、Filter::SQLが使いやすくて仕方がないという話。前にも書いたけれど私はPerlのデータベースプログラミングに苦手意識がある。SQLもPerlも人並みにはできるけれど、その両方がまざったのはどうもだめだ。だいたい、こちらはSELECTだけをすればいいのにuse 5.010;use DBI;my $dbh = DBI->connect("dbi:SQLite:dbname=foo.db");my $sth = $dbh->prepare("SELECT * FROM tabl... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
/lang/perl/Filter-SQL - CodeRepos::Share - Trac こんな感じで書ける。 use DBI; use Filter::SQL; Filter::SQL->dbh(DBI->connect('dbi:mysql:test;user=root')) or die DBI->errstr; SQL DROP TABLE IF EXISTS t;; SQL CREATE TABLE T (v int not null);; for (my $n = 0; $n < 10; $n++) { INSERT INTO T (v) VALUES ($n);; } foreach my $row (SELECT * FROM t;) { print "@row\n"; } ToDo: ターミネーションがダサい。もうちょっとなんとかならないか (括弧... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
どっちが良いとか悪いとかは関係なく、世の中のオープン技術で開発をしている会社は、 ・Java + Oracleを主流とする会社 ・Perl + MySQL、PHP + MySQLを主流とする会社 と、完全に二層に分かれてるなと思っている。 はてブ経由で見つけて、mixi内のリンクしちゃうけど、 業務経歴書にPerl案件を書くと馬鹿にされる件 就職活動の面接でPerlやってますとアピールすると、Java圏の面接官にバ... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
DSL (ドメイン固有言語) は、プログラム開発の生産性を向上させる有力な手段です。そして、よく使われる DSL の代表例が正規表現と SQL だと思うのですが、前者に比して後者を嫌いな人が多いようです。なぜだろうと思ってつぶやいたところ、「SQL はリテラルじゃないから!」という答えが tokuhirom さんから返ってきました。そういえば例えば Pro*C のように、C で Embedded SQL とい... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
|
最近、SQL で WHERE 句に入らず、ORDER BY やら GROUP BY もされず、かつ MAX() だとか MIN() だとかを求められる必要もない、言うなれば「取るに足らない値」とかを、個別のカラムに持たず、そういうのを一気にまとめて text 方のカラムに入れたりすることがあったりする。 例えば、住所録を作ろうなんつって、テーブルを組みたいわけだが、そもそも WHERE 句に入る要素なんて名前ぐらい... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|
データベースをオンデマンドでコピーするモジュール DBIx::Replicate を書いて、CodeRepos にアップロードしました。こんな感じで使います。 use DBIx::Replicate qw/dbix_replicate/; # 20才以下の人だけを young_table にコピー (1000行毎, 最大負荷 0.5) dbix_replicate({ src_conn => $dbh, src_table => 'all_people', dst_conn => $dbh, dest_table => 'young_people', primary_keys => [ qw/id/ ], columns => [ qw/id name age/ ], block => 1000, load => 0.5, ex... [ 詳細 ] [ 関連 ] [ ニコニコ風 ]
|