SQLiteによる運用について

このQ&Aのポイント
  • SQLiteはデータが肥大化するほどパフォーマンスが低下するのか?
  • SQLiteはデータの損失が発生しやすいのか?
  • SQLiteとMySQLの比較、VMWare上での運用に注意するべきこと
回答を見る
  • ベストアンサー

SQLiteによる運用について

SQLite3によるプロジェクト管理システム(Tracとか)の運用を考えております。 下記件について知りたく投稿させていただきました。 1.SQLiteは、データが肥大化するほどパフォーマンスが低下しますか? 2.SQLiteは、データの損失が発生しやすいでしょうか? の以上です。 比較対象としてはMySQLを考えています。本用途については、下記に述べますので、本用途での運用での問題及び、MySQLを使った場合の利点についてお答いただければ幸いです。 2.に関しては、どちらも大差ないと思いますが、当方ではVMWareにより、ゲストPCを仮想ファイル上で運用しておりまして、DBファイルも仮想ファイル上の中に入ります。その運用上で注意しなければならないことがございましたらご連絡いただきたいです。 開発者はせいぜい10~15人程度ですので、複数のセッションからのアクセスについては、あまり考慮しなくてよいと考えております。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MySQLもInnoDBであろうとMyISAMであろうと、一応、mysqldump でテキストファイルにすれば、完全なバックアップができます。 リストアもmysqldumpで可能で、バックアップを読ませるだけです。 アクセスが無いと分かっているなら、サービスを止めなくても一応出来ますね。 MySQL Administratorで、セッションの状態なんかを確認すれば尚安全です。 Firebirdは速いですよ。 あとは商用無料なので、頭を悩ませなくても済む所がお勧めできます。 もともとはInterbaseで、私は、それと付き合いが長いので信頼もしています。 MySQLともInnoDBが無かった頃からの付き合いなのですが、ライセンスが面倒なので、最近は、敬遠してるような気がします。 ODBCでもライセンスが必要らしいんで、MySQLでも、動いてしまう物はどうなんだろうとか考えると非常に悩ましいです。 SQLiteはプログラムに組み込んでしまえば、配布が楽とかそういう場面で重宝すると思います。 膨大なInsertを実行したりとか、そういう事をしないんであれば、どれを使っても大差はないと思います。はい。 ちなみにMySQLからFirebirdに、あるプログラムを移行させた事があるんですが、結構簡単に出来まして、ODBC経由なんで当たり前なんですが、BLOBなんかもプログラムのほうは手を加えず動かせましたので、MySQLを使ってみて、気に入らなければFirebirdに切り替える選択もできるかと思います(逆も) Firebirdはバックアップをするのに2つの方法が在ります。 1.コミットやロールバックをした後、ファイルを直接コピーしてしまう。 2.gbakを使う。 1は注意も必要ですが、小規模ならどちらもサービスを止める必要は無いですね。リストアも簡単です。 なので、バックアップ、リストアの手間も、どれも大差ないと思います。

piroporo30
質問者

お礼

なるほど。DBはWebシステムの開発に使ったくらいで運営経験はすくなかったので貴重なご意見でした。ありがとうございました。

piroporo30
質問者

補足

なるほど。DBはWebシステムの開発に使ったくらいで運営経験はすくなかったので貴重なご意見でした。ありがとうございました。

その他の回答 (1)

回答No.1

肥大化の程度のよりますが、パフォーマンスは落ちてくるでしょう。 TkSQLiteというツールで、削除フラグのたったレコードのメンテナンスが簡単にできます。 某ベンチマークによるとInsertが遅いようで。 10万行のInsert文で、MySQLと比べると5倍以上かかるようです。 ちなみにMySQLでは、InnoDBもMyISAMも、たいした速度差は無いようです。 SELECTに関しては、SQLiteのほうが微妙に早いようです。 1秒あたりのリクエスト数で、MySQLとSQLiteでは100件ほどの差があるようです。 個人的には。 仮想PC上で使うなら、Firebirdとか楽でよいと思います。 DBがファイルになってますので、コピーだけで、いろいろな環境にうつせますから・・・。 MySQLもdumpしてファイルにしてしまえば同じことですけど。

piroporo30
質問者

補足

INTLINSIDE様へ 回答ありがとうございます。 とても参考になる情報です。 大切なことを記述し忘れていたのですが、バックアップの利便性を重視しておりまして、SQLiteの検討を行っております。(SQLiteだと誰もサーバへアクセスしない夜半に、MySQLのようにサービス停めないで、DBファイルをバックアップできて良いかと考えております。) ちなみに、Firebirdは、以前ソフトウェアデザインでよんだことがある限りなのですが、SQLiteもDBがファイルとなっているため、Firebirdとの違いが良く分からなかったのですが、何かお薦めいただいた意図がおありなのでしょうか?

関連するQ&A

  • MySQL又はSQLiteについて

    お世話になります。 Androidアプリ開発でPHPファイルを読み込み、更にMySQLへ接続してデータベースの中身を反映させるとこまでは成功しました。 しかし、Androidアプリとデータベースの連携で調べると、SQLiteを推奨しているサイトや書籍が多いのですが、軽量のファイルベースで手軽に構築・運用できるという点は、何となくイメージできるのですが、MySQLに比べてSQLiteが明らかに優れている点はあるのでしょうか? 私は、8割方PHPでwebコンテンツの開発を行ってきました。そしてデータベースは100%MySQLを利用してきました。Androidアプリ開発を開始したのは、つい最近の事でSQLiteも今まで殆ど触れていませんでしたので、特にMySQLとSQLiteでメリット・デメリットの大差が無いのであれば、触りなれているMySQLを選択しようと考えています。 因みに、iOSアプリについては別の者が開発しています。 最終的には、AndroidとiOS両方の端末が1つのデータベースへ読みに行く構想ですので、もしiOSの開発側で、SQLiteの方が圧倒的に優れているとなれば話は変わってきますが・・・。 MySQLとSQLiteを比較して、SQLiteが優れている点のアドバイスをいただければ幸いです。 何卒、どうぞよろしくお願い申し上げます。

  • Pythonの設定方法(text_factory)

    あるシステムを実行すると、下記エラーが表示されました。 --------------- Traceback (most recent call last): File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\api.py", line 446, in send_error data, 'text/html') File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\chrome.py", line 830, in render_template message = req.session.pop('chrome.%s.%d' % (type_, i)) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\api.py", line 216, in __getattr__ value = self.callbacks[name](self) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\main.py", line 306, in _get_session return Session(self.env, req) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 223, in __init__ self.promote_session(sid) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 282, in promote_session @self.env.with_transaction() File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\api.py", line 77, in transaction_wrapper fn(ldb) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 287, in update_session_id """, (sid, self.req.authname)) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\util.py", line 65, in execute return self.cursor.execute(sql_escape_percent(sql), args) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 78, in execute result = PyFormatCursor.execute(self, *args) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 56, in execute args or []) File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 48, in _rollback_on_error return function(self, *args, **kwargs) ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings. ----------------- 調査してみたら、Pythonで、 text_factory = str を設定したら良いとわかりましたが、設定方法が わかりません。 対話モードで設定したら良いのでしょうか? Pythonに関しては全然わからないのでどのように設定したら良いかがわかりません。 教えてください。 よろしくお願いします。

  • 仮想OSから物理HDDにアクセスしたい

    SSD 120GB×3 RAID1or5 HDD 2TB×3 RAID1 上記構成で、PCをサーバ用途にしようと思っています。 SSDに何を入れるかは決めていませんが、HDDにはあらゆるデータを格納するつもりです。 VMWare ESXiで構成して、仮想OS複数、およびファイルサーバとして運用しようと考えていましたが、 よくよく考えたら、ファイルサーバについてはデータを仮想化したくない為、出来ないんじゃないかと思い、詰んでしまいました。 例えば ・Windows XP   仮想OS(全部vmdkでいい) ・Windows 7   仮想OS(全部vmdkでいい) ・Windows Server   仮想OS(全部vmdkでいい) ・CentOSなど(ファイルサーバ)   仮想OS(OS部分のみvmdkでいい)   物理的なHDDを認識させ、Sambaによるデータアクセスを行いたい というようなことをしたいのですが、ESXiに限らず、このような方法を取る手段はありますでしょうか? 但し、パフォーマンスを考え、VMWare PlayerなどのホストOSを要する方法は考えていません。

  • この場合MySQLかSQLiteどちらを学ぶべきか

    MySQLかSQLiteのどちらを学ぶべきか迷っています。 下記機能を実装したページを実現する場合、 MySQLの代わりにSQLiteでも問題はないでしょうか。 よく不動産サイトで使われているもので、 条件を指定して検索して物件を絞り込んだり、 合計何物件が見つかりました、 3日以内に公開された物件は、 価格順や土地面積順に並び変える、 各エリアの公開物件数の一覧 サイト内検索 チェックした物件をまとめてお問い合せ この物件をお気に入りリストへ登録 などの機能があり、物件を公開すると自動的に上記機能をその物件に対して扱えるようになる。 などの機能をAjaxを使って実現を目指したいと思っています。 全国区の有名な不動産サイトでは数万物件と膨大ですが、 自分が扱おうと思っているデータ量は1000物件より少ないです。

    • ベストアンサー
    • MySQL
  • virtual pc にLinuxインストール

    vurtualPC2007を使って仮想マシンにLinux(vine Linux4.2)をインストールしようと思っているのですが仮想マシンを作成して起動し、isoイメージファイルを読みこませようとしているのですがインストール画面が出ません。(XPの仮想マシンもつくっているのですが(インストールCDで)、それ作るときは問題なかったのですが)。どうしたらいいですか。 またLinuxだとホスト,ゲスト間でファイルの移動が出来ないと聞きます。なのでVmware serverというソフトでLinuxをインストールしようと思っているのですが、お聞きしたいことがあります。 1.Vmware serverの場合、isoファイルでLinuxをインストールできるか 2.Vmware serverのWmware toolsという機能があると聞くが、インストールすると、ホスト、ゲスト間でファイルのやり取りが出来るか。またゲストOSがLinuxの場合でもインストールできるか。 3.もし2が出来ないならどうやってホストにあるファイルをゲストに 移動させるか です。的外れな質問かもしれませんが回答お願いします。

  • PerlでSQLiteを使おうとしてもうまく行きません

    下記のような感じでPerlプログラムからSQLiteのデータベースから読み出すプログラムを組んでみました。 もちろん、実際にデータベースのファイルを作ってあります。 下のように、かなりシンプルで簡単なプログラムですし、 間違ってもいないとは思うのですが・・・ use DBI; $db = DBI->connect("dbi:SQLite:dbname=accountdb","","",); $sth = $db->prepare("SELECT * FROM user"); $sth->execute;#結果を取得しresに代入 print "$sth\n"; $sth->finish; exit; 上を実行した結果は、下記の通りです。 DBI::st=HASH(0x32706c4) closing dbh with active statement handles during global destruction. 私が思うに、データが$sthに帰って来ると思うのですが、 実際にはDBI::st=HASH(*****)のようなものしかかえってきません アドバイスをどうか宜しく御願いします (別カテゴリで似たような質問をさせていただきましたが、これはまた別です・・・)

  • VMwarePlayerで動作させていたゲストOSをVMware Se

    VMwarePlayerで動作させていたゲストOSをVMware Serverへ移行しようと思っております。 VMwarePlayer  ゲストOS:CentOS  仮想HDD:160GB(IDEとして動作)  仮想メモリ:1024MB VMware Server側でvmxファイルを読み込ませ、グレードアップを実行した後、起動させると 仮想HDDはSCSIではないので動かせません、といった英文メッセージが表示され、起動することが できません。 VMware Playerでは問題なく、ゲストOSを起動させることができます。 仮想HDDを一端、構成上から取り外し、再度SCSIとして読み込ませ起動させると、仮想HDDは認識 しますが、システムにマウントできなくなり、OSが正常に起動しません。 解決策がお分かりになる方、是非アドバイスを願います。

  • VMware server 内の仮想データはWindows版とLinux版共有できるのでしょうか?

    現在ホストがWindowで運用しているVMware server内の仮想ファイル (.vmx .vmdk .vmsd等です)はLinux版のVMware serverに移しても そのまま使えるのでしょうか? スナップショットでなくそのままファイルを移せればと思っているのですが 可能でしょうか? VMware server は1.0.X系、2.0系でも大丈夫かどうかも できれば知りたく思います。(私が使用しているのは1.0.10です) よろしくお願いします。

  • PHP、SQLite3のデーターでログイン認証

    PHP、SQLite3のデーターベースでログイン認証をさせたいのですが、うまくいきません。 MySQL用のコードを自分でSQLite3用に改造したのですがやはり駄目でした。 コードは以下の通りです。 <?php // セッションの生成 session_start(); // ユーザー名/パスワード $usrid = htmlspecialchars($_POST['usrid'], ENT_QUOTES); $usrpw = htmlspecialchars($_POST['usrpw'], ENT_QUOTES); //データーベース接続 require_once('dbcon.php'); // データベースへの問い合わせSQL文 $sql = 'SELECT id,name FROM meibo WHERE usrid = "'.$usrid.'" AND usrpw = "'.$usrpw.'"'; $sth = $dbh->prepare($sql); $sth->execute(); // 認証 if ($row = $sth->fetch() == 1) { // ログイン成功 $login = 'OK';       $row = $sth->fetch();       // データーをセッション変数に保存 $_SESSION['id'] = $row->id; $_SESSION['name'] = $row->name; $_SESSION['usrid'] = $row->usrid; echo 'ログインに成功しました。'; } else { echo 'ログインに失敗しました。'; } //データーベース切断 $dbh = null; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <?php echo $_SESSION['id']; ?><br /> <?php echo $_SESSION['name']; ?><br /> <?php echo $_SESSION['usrid']; ?><br /> </body> </html> データーの表示、追加、削除は可能な状態です。 根本的に間違っているのでしょうか?またはちょっとした手直しで問題解決できるのでしょうか? お分りの方いらっしゃいましたらお教えください。

    • ベストアンサー
    • PHP
  • VMware playerについて

    VMware toolsのインストールをしたいのですが、実行すると、 「VMware toolsは、仮想マシン内にのみインストールしてください。」 という表示が出たあと、インストールが中断されて、インストールできません。 ・仮想PCでメニューの「仮想マシン→VMware Toolsのインストール」⇒上記の表示がでてしまう。 ・C:\Program Files\VMware\VMware Player」の中に「windows.iso」があります。(メインPC) 下記の同じような質問があり同じような条件なのか、確認してできませんでした。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1169173776 ※ホストPCがメインのPCで、 ゲストPCが仮想PCですよね? メインPCは7 64bit ホストはxp homeです。 よろしくおねがいします。