UNIX DBMはこちら(GNU gdbm, Berkeley DB etc...)
リレーショナルじゃなくてもSQLでなくてもデータベース。 C/C++, perl, python, tcl/tk, java etc言語バインディングも 豊富だしお前ら、もっと活用してみませんか? Berkeley DB http://www.sleepycat.com/ GNU dbm http://www.gnu.org/software/gdbm/gdbm.html qdbmっていいの?そんなにいいの? 使うよ?いいの? cygwin + ruby1.8 + BerkeleyDBでうまくいってる人いる? おいおい、会社でだめぽだったのに家では余裕でできた。 会社のはbdbがdevel版がインストールされてなかったのかな。 perlでNDBMを使ってたんですけど1日で10倍以上にサイズが肥大化したので Berkeley DBに変更しました。すると肥大化はしなくなったものの負荷が数倍かかるようになりました。 GDBMなんかは肥大化するわ壊れるわで最悪でした。 perlのバージョンを変えてもapacheのバージョンを変えても解決せず。 アクセスが多すぎると駄目なのでしょうか。 >>131 ちゃんとファイルロックしてないだろ。壊れるのあたりまえ。 NDBMにしろGDBMにしろ最初はファイルサイズ大きくなる。 が、後からはデータを追加してもその分しか大きくならない。 flockでファイルロックは行っています。 壊れるというのは、ファイルが飛んでサイズが減るわけではなく サイズはそのままで全てのデータが読み込み出来なくなります。 ぷららのサーバで同じように試してみるとどんどんファイルサイズに差が出てきます。 直ぐに200KBと5MBくらいに差がでました。 1度テキストに変換して全て書き直すとサイズは200KBまで落ちたので異常に肥大化されているような気がします。 QDBMはインストールはしましたが書き込めても読み込めなく、原因が分からなかったので諦めました。 許容できないなら仕方ないが、サイズの肥大化は 索引や効率を考えて前もって領域を確保してる分だから、 動作としてはおかしくない。 あと実装によってはdbm側でロックの機構があるから、 それを使う方が望ましいかもしれない。 >>131 GDBMが壊れるあたり、DBとの接続をちゃんと切ってないことない? CGIとかでも、プロセスが死ぬ前に確実に接続を切る(ハンドルを閉じる) ようにしないとファイルがおかしくなるよ。 SymbianOSに入るようなメモリ空間100KB以下の DBご存知ないですか?C言語でお願いしまっする。 >138 そんなん(メモリ空間100KB以下)だったらDBいらねーんでは? >>138 QDBMは? POSIX互換なら動きそうだけど。 solidはどう?商用だけど。 ノキアやOpenViewで使ってるって。 超遅レス >>134 bdb使っているのにflockでロックってなんの冗談なんだろう? ttp://pybsddb.sourceforge.net/ref/lock/stdmode.html BerkeleyDBよく見たらすごいな。 トランザクション使えるし、レプリケーションできるし、 オンラインバックアップできるし、2phase commitできるし。 ただ、ライセンスがきつくて使いづらい。 BerkeleyDBの料金体系ってどんな感じなんでしょう。 どなたか具体的なお話を聞かせて頂けないでしょうか? Sleepycatにサポートしてほしいってこと? 直接聞けばいいのに。 >>148 公表されても構わないことと思われるのに、 ネットで全然その話題に行き着かなかったのです。 BerkeleyDBの利用しづらさって、その辺が全然分からんのもあると思うので、 どなたか情報を放流してもらえないかと期待しての書き込みです。 >>150 いや、そこに載ってるのはサポートの価格で 知りたいのはコマーシャルライセンス自体の価格だと思われ。 Sleepycatのオープンソースライセンスは実質GPL(否LGPL)と同等だから、 製品に組み込もうと思ったら、その製品のソースも何らかの形でオープンにしないと駄目。 http://www.opensource.jp/licenses/sleepycat.html 多分InnoDBと同程度の価格だと思うんだけど、InnoDBはOEMオンリーで 結局MySQLでの価格差でしか見れないし、本当の供給してる値段は判らんね。 QDBMのVillaで、重複レコードは同じキーのレコードの末尾に格納されるとあるけど これはキーが重複したレコードの中では登録日時順に並ぶという事だよね。 しかし分からないのはその後の「DBのアップデートの為にそのカーソルは使えなくなる」という記述。 どういう事? マニュアルのサンプルコードで重複キーのレコードに対してカーソルを使っているが。 QDBMのVillaの比較関数ってどこに書いてどう使えば良いの? とりあえずVLCFUNC型の変数に自作関数のポインタを入れてみたけど それで自動的に使われるというわけではないみたいだし。 おー、分かった。 すっげ嬉しい。 openするメソッドの引数で指定するんじゃん。 灯台下暗しだな。 俺は下以外も暗いけどな。 qdbmのodeumはWEB上の文書しか扱えないの? アプリケーション内で作った文字列を格納する方法が見当たらないんだが。 個々の文書はwebとは限らないけれど、もとの文書を格納しておくわけじゃな くて、転置インデックスしか管理しない。 estraierの用途を考えればわかるように、元の文書はどっか他の場所にファイ ルとしてあるっていう前提があって、 odeum 側で、いちいちそのファイルの 内容をコピーせずに、そこへの参照(パスとか)だけ持てばいいって発想なんだ ろう。 APIなんだから、対象の文書がどこに保存してあるとか関係ないでしょ。 ODDOCオブジェクトを作ってoddocaddwordで語を入れさえすればいい。 pure java のDBMっぽい。おまえらコントリすれ http://jdbm.sourceforge.net/ >>161 BSD License だったから あげさせてもらうよ oddocopen("URI")は、実際にそのURIにアクセスしてデータを取得したりしないの? >>157 しないよ。文書にIDをつけてるだけみたい。実際にはユニークであれば どんあ文字列をしていしてもいいみたい。 QDBMのC用APIにはvistaがあるけどC++用APIには無いのは何故? QDBMのODDOC型にunsigned intのポインタを加えようとして、 ODDOC構造体にunsigned int *num;を書き加えて、 アプリケーション側でODDOC->num = unsigned intのポインタ; と書いたのだけど、 odput内でODDOC->numを書くとセグメンテーション違反になってしまう。 oddocopen();を、unsigned int *numを引数として受け取る様にして、この関数内でODDOC->num = num; とする方法も試してみたけど、そうするとポインタの代入が上手く行かない。 oddoc *doc; unsigned int num[10]; cout << num << endl; doc = oddocopen(URI,num); cout << doc->num << endl; で、numとdoc->numの値が異なってしまう。 原因分かる方居たら教えてくれませんか? >>167 reboot後にコンパイルしても変わらないし、make uninstall して make installしても変わらないし、 変更が一部反映されてるからそれは大丈夫だと思うんだけど。 話は変わるけど、 c++でvistaを使いたくて、 アプリケーションのソースコードに#include<vista.h>を書いてみたり、 xvilla.hやxvilla.ccのvilla.hの部分をvista.hに変えて見たりしたけど そのアプリケーションを実行してもディレクトリじゃなくvilla用のファイルが生成されてしまう。 qdbmのメーリングリストに参加しようとしても何故かメールが送信出来ないし。 qdbmのマニュアルのサンプルコードをvilla.hからvista.hに変えて使ってみると ちゃんとディレクトリ生成してvistaとして動くんだけど。 xvista.hというファイルは無いし。 C++ではvistaは使えない仕様なのかな? インストール時に発生していた問題に応急処置をしていた事が原因でした_no バークレーDBをperlで使っていますがファイルロックがよくわかりません。 >>142 氏のリンク先を何度読んでも理解できず… どなたか簡単に解説をお願いできないでしょうか。 すんまそん…、普通にperldocに日本語で書いてありました。 お時間の許す方は煽ってやってください orz >これを性能指標とするならば、例えば100万個のレコードを格納するためには50万要素のバケット配列が求められる。 >バケット配列の各要素は4バイトである。 >すなわち、2MバイトのRAMが利用できれば100万レコードのデータベースが構築できる。 QDBMのマニュアルから引用。 これって、バケット配列は2Mしか使わなくてもハッシュが重複してるレコードが50万あるからその為にメモリ使って 2Mバイトじゃ済まないよね? 重複レコードをどう扱ってるのか知らないけど、ポインタとprimary keyが要るから バケット配列と合わせて合計6Mは使いそうな気がするんですが。 > ハッシュ値の衝突はセパレートチェーン法で管理する。チェーンのデータ構造は二分探索木である。 という記述と、 > レコード部はバケット部の直後からファイルの末尾までを占め、各レコードの以下の情報を持つ要素が記録される。 > 1. フラグ : `int' 型の整数である。 > 2. キーの第二ハッシュ値 : `int' 型の整数である。 > 3. キーのサイズ : `int' 型の整数である。 > 4. 値のサイズ : `int' 型の整数である。 > 5. パディングのサイズ : `int' 型の整数である。 > 6. 左の子の位置 : `int' 型の整数である。 > 7. 右の子の位置 : `int' 型の整数である。 > 8. キーの実データ : キーのサイズで定義される長さを持つ一連のバイトである。 > 9. 値の実データ : 値のサイズで定義される長さを持つ一連のバイトである。 > 10. パディング : 値のサイズとアラインメントにより算出される長さを持つ一連のバイトである。 という記述から判断するに、重複レコードのポインタはファイル内に記録してあるっぽい データベースそんなに更新しないならcdb最強でFA? そろそろdbopenします。 やっぱりver1が落ち着く。 Berkeley DBとBSDは全く関係ねーだろ。 Berkeley DB メールで値段聞いても無視だったよ なんなんだろうwww ボラクルに買収されたから使うのやめよ。。 ボラクル調子こきすぎてなんかむかついてきたぞ。。 BDBオープンソースじゃなくなる日も近いのかな。。 その時はGPL化されてFedora DBになりますからご心配無く。 FSFにはgdbmがあるからBDBを買い取る理由がない。 Red Hatは自社のLinuxのパッケージデータベースにBDBを使ってる。 おそらくBDBユーザ数としては最大。 QDBMがACIDサポートすればBDB要らなくなるかも オラクルは InnoDB も買収したが、MySQL の買収には失敗したようだな。 Berkeley DBでデジカメの画像をデータとして入れる時はどうしたらいいの? 教えて下さい。 いや、普通に入れれば入ると思うんだけど。 もうちょっと具体的にどんな言語を使うとかどういう使い方をするとか詳しく。 >>194 有り難うございます。 いくつか見たサンプルが、いずれもテキスト形式のデータだったので、 バイナリデータは何等かのかたちでエンコードする必要が有るのかなと 思い、確認をしないまま質問してしまいました。 FreeBSD 6.1Rでgccを使っています。 今は郵政公社の郵便番号データをサンプルデータとして、Cで簡単な プログラムを書きながら使い方を覚えようとしている途中なので、 具体的にこういう使い方をしたいと言えるレベルに達していません。 一応、画像データ、撮影時の情報、データ加工の内容等を リンクさせて見たいなと思っています。 画像データは結構サイズが大きいのですが(RAWデータだと数十M位) データの取り扱いで何か注意しなければいけない事など有りますか? もしよろしければ注意点などお願いします。 画像ファイルはどこかのディレクトリに置いといて、 パスだけDBに入れるってのもアリかもよ。 取り回しが面倒になる欠点はあるが、万一DBが壊れた場合の 復旧とか考えるとそっちの方が安心。 >>196 先ずはパスを管理するデータベースを作ってみようと思います。 色々質問をしてすみませんでした。 画像データのサイズは数メガの間違いです。 3年掛かりでやっと200レスか。まったりしててよきかな。 とっつきにくいからねえ。使ってる香具師も皆無だし、マヌアル本も皆無。 >>202 漏れのことを忘れないでくり。 職場のweb上の会議室予約のデータベースに使ってる。 速い、手軽、イイー。 >>204 相談に乗りますよ。検索→読みモジュールと書き込みモジュールとあるが それぞれ20万でどうよ。 perl cgiで二十万はボッタクリだな。 ハロワに月収18万で募集掛けたほうが安く上がる。 >>206 その通り。モジュール類だけ挙げるとこんなんだす。 #!/usr/bin/perl use Fcntl; use SDBM_File; use Time::Local; require "cgi-lib.pl"; require "jcode.pl"; &ReadParse; >>207 吹っかけただけだす。そらあんた、5〜6マソで十分よ。 499 :心得をよく読みましょう :2006/04/11(火) 20:08:43 ID:YyJFkPDl この文章を見た人には3日後に身の回りで何かとても悪い事が起きます 悪いことを起きなくさせるためにはコレと同じ文を 2日以内に違う所へ5回書き込んでください5書き込まなかった 女子中学生が書き込み見た後 3日後に死にました やっぱフリーのデータベースなんか流行るとデータベースソフト屋さんは 困っちゃうから、>>209 みたいな嵐が入るんだろうな。 無料なのにお金が取られることを理解しないクライアントは多いからね。 無料ソフトだと、開発費やサポートも無料か激安になりやすい。 クライアントが有料DBのライセンス料を知っていて、かつ技術畑出身だったりする とまだいいんだけど、オ−プン系技術者募集と称して 「タダソフトみつくろって組み合わせるだけだろ?もったいつけんじゃねえよ」 みたいなとこも(ry 本当にダウンロードしただけのやつにぼったくりの請求する香具師も居るから、客には見分けつかないし。 でも無料ソフトに人件費やサポート料払ってたら、サポート付きの有料ソフトのほうがコストが安かったのは良くある話。 逆にオプソビジネスって、セールソフトを超える利益は見込めない罠。 >file hoge.db すると、 Berkeley DB (Btree, version 6, native byte-order) と返ってくるファイルがあるのですが、どのようなkeyがあるのか わかりません。 このhoge.dbから、全てのkeyと値のペアを取り出したいのですが、 どのようにすればいいのでしょうか? Cかperlでお願いします。 use Fcntl; use DB_File; tie my %db, 'DB_File' , "hoge.db", O_RDONLY, 0644, $DB_BTREE or die "$!\n"; foreach (keys %db) { print $_, "\n"; } ↑だと Inappropriate file type or format こんなエラーが出ます。 どう出来たかぐらい示せばいいのに。 自分だけ良ければいいという自己中ですか? db_statとかdb_dumpとか使えばよろしい 臣堕駄だ陀雫 臣 心 仲間 ありがとう 心 臣 神 仲間 >>93 >Berkeley DBにあるRECNOってドンなの? >HASHとかBTREEならちょっとはわかるんだが。 >実際どういう風に使うもんなんだろ... テキストエディタの行を管理するのにに使われてる。 >The Berkeley Vi Editor Home Page http://www.bostic.com/vi/ http://www.bostic.com/keith.html http://www.onlamp.com/pub/a/bsd/2000/03/24/bostic.html >TDBM -- A Simple, High-Performance Database With Atomic Transactions http://72.14.235.104/search?q=cache:HjphsOxDNr0J:www.dss.ca/dss/tech/tdbm.html+tdbm&hl=ja&gl=jp&ct=clnk&cd=4 http://www.netsw.org/database/hashfile/ > tdbm-1.2.tar.gz 08-Feb-2002 21:10 153k >[TXT] tdbm-1.2.tar.gz.BLURB 08-Feb-2002 21:10 1k BerkeleyDB.pm からトランザクションサブシステムを有効にしたDBを扱ってるのだけど、 どれだけ使っていてもログファイルが log.0000000001 から進まない。 これってどういう状況なのでしょう。 DB_ENVなどに何か良からぬフラッグが渡っているのではないかと BerkeleyDB.pm の 関連ソースを眺めてもそれらしいことをしている部分はないし、或いは berkeley db 本体の コンパイル時に何か問題があったのでしょうか。。。 どなたか詳しいかたご助言を。 ログ管理は別ソフトなんじゃないの? syslogdみたいなのとかさ。 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる