web-dev-qa-db-ja.com

内部使用のWebサイト:SQLiteに対して説得力のある事例はありますか?

Flask または Django などの多くのWebフレームワークは、デフォルトデータベースとして SQLite を使用します。 SQLite はPythonに含まれているため、説得力があり、管理オーバーヘッドはかなり低いです。

ただし、ほとんどの高トラフィックのパブリックプロダクションサイトは、より重いデータベース(mySQL、Oracle、またはpostgresql)を使用して終了します。

質問

想定:

  • サイトのトラフィックは中程度で、データベースへの同時読み取り/書き込みアクセスが発生します
  • SQLAlchemySQLite書き込みロック と一緒に使用します(ただし このコメント は少し緊張します)
  • データベースにはおそらく60,000レコードが含まれます
  • より重いデータベースにある高度な機能を必要としないデータ構造

中程度のトラフィックの内部企業ツールとして機能するWebサイトの SQLite 同時実行に対する説得力のある事例はありますか?もしそうなら、どのような条件で SQLite に同時実行の問題が発生しますか?

私は、一般的な恐怖/根拠のない指さしの代わりに、既知の特定の根本的な原因を探しています。

23
Mike Pennington

あなたの質問への公式回答 SQLiteの適切な使用法 を読むことをお勧めします。具体的には、「別のRDBMSがより適切に機能する状況」では、SQLiteが同時書き込みをサポートしているではないと警告しています。

SQLiteは無制限の数の同時リーダーをサポートしますが、同時に使用できるライターは1つだけです。多くの場合、これは問題ではありません。各アプリケーションは、データベースの作業を迅速に実行して続行します。ロックは数十ミリ秒以上続きません。ただし、より多くの同時実行性を必要とするアプリケーションがいくつかあり、それらのアプリケーションは別のソリューションを探す必要がある場合があります。

適切性の観点から、私はSQLiteをSQLクエリをサポートする非常に洗練されたファイル形式と見なす傾向があります。データベースをWebアプリケーションから分離する場合、SQLiteはこのケースに最適化されていないため、回避する傾向があります。要するに、SQLiteは一部のシナリオで使用するには十分にスケーラブルではないため、いつか人気になることを期待しているWebサイトを実行している人は、SQLiteを使用して後で強制的に切り替えるのではなく、スケーラブルなものから始めた方がよいでしょう。

そうは言っても、SQLiteはおそらくほとんどの内部Webサイトに適しています。通常、内部Webサイトは、同じレベルの同時実行性とスケーラビリティを必要としません。

23
Brian

ITディレクターの帽子をかぶると、ここにいくつかの立ち入り禁止が表示されます。

  • データ破損のリスク。おそらく本当のことよりも考えられていますが、1日の終わりには、これは非トランザクションファイルタイプのDBであり、最近のバックアップを取得しているかどうかを尋ねる以外に、不正な書き込みに対する手段がほとんどありません。そういえば。 。 。
  • このことをどのようにバックアップしますか?ある意味、私は良いコピーを手に入れました。できればアプリをオフラインにしないでください。
  • DBへのアクセスを保護するにはどうすればよいですか?私の一般的な理解は、SQL liteはファイルシステムアクセス以外には何も持っていないということです。特に、DBAよりも段階的な権限が必要な場合や何もない場合があるWebアプリの場合。

開発者の観点からは、なぜSqlLiteがデフォルトであるのかを理解することが重要だと思います。プラットフォームを新しい開発者に「販売」する場合、最小限の手間で動作中のWebアプリを起動できることが重要です。また、立ち上がってデータベースサーバーを適切に構成することは、回避すべき大きな障害となります。

4
Wyatt Barnett