アプリを作ってると色々ログ系をDBに保存しておきたかったりするのですが、 ログテーブルって結構でかくなってしまう運命です。 DBによってはテーブルサイズがでかくなると検索効率が落ちてしまったり ちょくちょく問題になってしまうのですが、 ログテーブルを年月ごととかで分割すると結構さくさく扱えたりします。 ただ、普通にDBIC使ってると分割したログテーブル毎にスキーマを用意する必要が でてきてしまうです。 例えば access_logってテーブルがあるとして、これを年月で分割して保存させるばやい、 access_log : Proj::Schema::AccessLog access_log_200706 : Proj::Schema::AccessLog200706 access_log_200707 : Proj::Schema::AccessLog200707 access_log_20
結論: DBIC で bulk insert するには DBIC::ResultSet->populate を使えばよい。ただし primary key を明示的に指定する必要がある。大量のデータを mysql に一度にぶちこみたいときには INSERT 文をたくさん発行すると遅いので下記のように bulk insert するのが基本です。 insert into boofy (a,c) values (1,2),(2,3),(1,2),(2,3),(1,2),(2,3),(1,2),(2,3),(1,2),(2,3),(2,3),(1,2),(2,3); だがしかし DBIC でこれをやるにはどうしたらいいのだろうか。最近まで id:nekokak の記事を鵜呑みにしてできないとばかり思ってたのですが Wassr で不意に bulk insert したくなったので調べてみたら、ちゃんと
※Fedora7を使用 [mecab導入] 楽だ。 yum -y mecab mecab-devel mecab-ipadic perl-mecab [senna導入] cd /home/hoge/rpmbuild/SOURCES wget http://iij.dl.sourceforge.jp/senna/25607/senna-1.0.7.tar.gz tar xzvf senna-1.0.7.tar.gz SPEC発見。 cp senna-1.0.7/senna.spec /home/hoge/rpmbuild/SPECS/. cd ../ rpmbuild -bb SPECS/senna.spec あら、エラーが出た。 error: File /usr/src/redhat/SOURCES/libsenna-1.0.7.tar.gz: No such f
名前¶ DBIx::Class::Manual::Cookbook - レシピいろいろ レシピ¶ 検索¶ ページ処理された結果セット¶ When you expect a large number of results, you can ask DBIx::Class for a paged resultset, which will fetch only a small number of records at a time: 結果セットが膨大になりそうなら、ページ処理された結果をDBIx::Classで取得できます。 一回に、少しのレコードしかとってきません: my $rs = $schema->resultset('Artist')->search( undef, { page => 1, # page to return (defaults to 1) rows => 10, #
[カテゴリ:Perl] お手軽にShcemaを作る 作られるSQLを見たい ◯◯でなければ作成 見付からなければ作成 更新でなければ作成 find_or_new is null / is not null transaction update_or_create で id => "" を渡すと? countとgroup_by お手軽にShcemaを作るuse DBIx::Class::Schema::Loader DBIx::Class::Schema::Loader::make_schema_at ( "DB::Schema", {debug => 1, relationships => 1}, ["dbi:mysql:dbname"] ); 作られるSQLを見たい$ENV{DBIC_TRACE} = 1; とすれば、STDERRに出力される。 $ENV{DBIX_CLASS_STORA
DBIx::ClassでMySQLのREPLACEもしくは ON DUPLICATE KEY UPDATE に当たるものはなんなのか、前もわからなくていろいろ調べたのにまた今日も同じことを調べてたのでメモっとく。 my $recent = $self->{schema}->resultset('Recents')->update_or_create( { id => $self->{user}->id, .... } ); こう書く。一度newしてから my $recent = $self->{schema}->resultset('Recents')->new( { id => $self->{user}->id, uniq_column => $self->{user}->accountname, .... } ); $recent->update_or_create; っていうのはで
For those of you who're interested in me demonstrating just how badly I interview, you can hear a perlcast podcast interview with me about DBIx::Class which was recorded last month.Better still, after 7 dev releases, four of them RC grade, a lot of bug fixing, a lot of hating databases, and sterling work from many many people, I'm proud to announce that DBIx::Class 0.08000 is on its way to being a
タイトルは「Catalyst::Plugin::FormValidator::Simple::Autoを使ってる時にFormValidator::Simple::Plugin::DBIC::Uniqueが使えない?件」です。 長いので短くしてみました。 使えないというかどうやって使うのかがわからないというのが正解なんですが、FVS::Auto使って zip: - rule: [ 'NOT_DBIC_UNIQUE' , 'MyApp::Model::DBIC::Zipcode' , 'zip'] message: 存在しない郵便番号です みたいに書いてもFVS::P::DBIC::Uniqueエラーになっちゃいます。 Catalystが内部で保持しているmodel(ResultSet)オブジェクトを利用したいのですが現状のままじゃ無理ぽい? myapp.yamlでパスに変換してくれる特殊構文
DBICでdatetime型のカラムを使うときはInflateColumn::DateTimeを使ってinflate/deflate時に自動的にDateTimeクラスから/に変換してくれてとっても便利ですが、それに慣れっこで検索条件にdatetime型を指定するときは要注意です。 とはいっても、sqlite限定の問題。 sqlite> select id, username, created_on from users; 1|user1|2007-06-14 00:00:00 ... とかいうデータがあったとして my $dt = DateTime->new( year => 2007, month => 6, day => 14, time_zone => 'local' ); my $users = $schema->resultset('Users') ->search( { cre
Perl, singletons, DAOs oh my! Lately I have been toying with Wicket , Hibernate and Spring for potentially writing a large complex site. Contrary to what people say about Java web development it isn't so bad, at least with Wicket. Since toying with Hibernate and DAOs, I came to the conclusion this can work really well in Catalyst! Instead of micromanaging what to page cache, just cache the specifi
Windows 10 の入ったディスクのバックアップが clonezilla で外形的にできることがわかった Posted on Jun 27, 2020 Windows10 が載ってるディスクに破壊的な変更加える前にバックアップしたくて、SystemRescueCd で clonezilla 使ってディスクまるごとイメージ化した(内部的には partimage が使われてる?)。 でこれ、レストアしたら起動する状態まで持っていけるんかな? すんごく不安だ。。。 — woremacx (@woremacx) June 15, 2020 systemrescuecd に同梱されている clonezilla を使ってまるまる取った Windows 10 のバックアップが戻せるか不安で仕方なかったので、VirtualBox に戻せるか試した。 そもそもなぜ clonezilla を試したかったの
[% WHILE %] の中のこと その後 (日々のこと) と、思っていたら、多対多のときには _rs ではできないね。 そうそう。忘れてました。many-to-manyではできないんですね。 これはドキュメントにもちゃんと書いてあって DBIx::Class::Relationship - Inter-table relationships - search.cpan.org Many_to_many is not strictly a relationship in its own right. Instead, it is a bridge between two resultsets which provide the same kind of convenience accessors as true relationships provide. Although the ac
よくわからない表題ですが要は・・・ MyApp::Schema::TopicsとMyApp::Schema::Commentsが1:nの関係にあるとして package MyApp::Schema::Topics; use strict; __PACKAGE__->has_many('comments' => 'MyApp::Schema::Comments'); 1; こんなアクションで sub list : Local { my ( $self, $c ) = @_; my $topics = $c->model('Topics')->search({}); $c->stash->{topics} = $topics; $c->stash->{template} = 'list.tt'; } TTで素でやる場合 <html> <body> <ul> [% WHILE (topic =
ってのをつくってみました。 ちょっと微妙な実装だったり、ほかにいい方法あるんかもしれないですが これくらいしか思いつかなかったので。 利用方法としてはたとえば userテーブルにレコードを作成するときに リレーションのあるプロフィールテーブルにもレコードを「絶対に」一緒に作るぜ! ってな場合、こんな風にかいてもいいのですが、 my $user = $self->model('User')->create({ name => 'nekokak' }); $user->create_related('profile',{ zip1 => $zip1 }); みたいな感じでかいてもいいのですが、 別でUserテーブルにInsertをかける場合が発生したらこのプロフィールテーブルに レコードをつっこむことをわすれてしまうことがあるかと思います。 なのでDBICでinsert時にHookしてみました
DBIx::Class::Schema::Loader についていろいろなことを教えてもらったので、早速試そうとして、コケた。 とりあえず、横着してワンライナでやるのをやめて、今後いろいろな拡張ができるLoaderにすべく、こんなシンプルなコードを書いた(書いたというよりコピった)。use strict; use warnings; use DBIx::Class::Schema::Loader qw( make_schema_at ); make_schema_at( 'MyApp::Schema', {relationships => 1, debug => 1, dump_directory => '/home/junichiro/lib' }, [ 'dbi:mysql:my_dbname', 'junichiro', 'password' ] ); ところがこれがうまくいかない。
Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at
DBICのEncodeColumnsとかがResultSet::createで誤動作する件、ほか 実際はDBIC::EncodeColumnsを使っていて気づいたのですが package Schema::SjisTable; use strict; use warnings; use base 'DBIx::Class'; __PACKAGE__->load_components('EncodeColumns', 'PK::Auto', 'Core'); __PACKAGE__->decode_columns('cp932'); と定義してあるスキーマに$schema->resultset('SjisTable')->create({ ... })という感じでinsertするとcp932でDBに格納されるのではなくutf8でDBに格納されてします。 これはUTF8Columnsでも、utf
DBIx::Class::Schemaの使い方 亀レスだけどSchema::Loaderネタが流行ってたみたいなので、最近の自分の使い方を。 まぁSoozyつかってるのでmake_schema_atで作られた静的なSchema使ってるんだけども。 自分的にはSchmeaクラスは一切手をつけたく無いので、大部変わった事をしているかも。 若干mfacインスパイアぎみではあるけど。 package Soozy::Plugin::DBIC::AutoSetup; (略) sub setup_components {#Catalyst::setup_componentsとほぼ同じ my $class = shift; my $schema_bases = Soozy::Component::Loader->find_components( '', search => [ $class->base_c
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く