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


23

FlaskDjangoなどの多くのWebフレームワークは、デフォルトのデータベースとしてSQLiteを使用します。 SQLiteはPythonに含まれており、管理オーバーヘッドが非常に低いため、魅力的です。

ただし、トラフィックの多い公共の本番サイトのほとんどは、mySQL、Oracle、またはpostgresqlなどのより重いデータベースを使用しています。

質問

仮定:

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

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

一般的な恐怖/根拠のない指差しではなく、既知の特定の根本原因を探しています。


バックアップなどに役立つ可能性のあるレプリケーションなどの機能を備えたsqlliteはどうですか?SQLliteでは、アプリがデータベースを所有しているという印象を受けます。アプリの起動中に管理スクリプトなどを実行できますか?
ダグT.

1
SQLiteと同時実行性に関するいくつかの逸話(主に肯定的):sqlite3同時アクセス
ダニエルB

1
内部Webサイトの場合、SQLiteの強い理由は何ですか?RDBMSのインストールに関する制限はありますか?
ジェフ

個々の開発者のラップトップの開発環境を簡素化する以外に理由はありません。当然の疑問は、我々が合理的に開発・生産環境を簡素化することができるかどうかである
マイク・ペニントン

回答:


23

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

SQLiteは、無制限の数の同時リーダーをサポートしますが、一度に1人のライターのみを許可します。多くの場合、これは問題ではありません。各アプリケーションはデータベースの動作を迅速に実行し、先に進みます。ロックは数十ミリ秒以上持続しません。しかし、より多くの並行性を必要とするアプリケーションがいくつかあり、それらのアプリケーションは別のソリューションを探す必要があるかもしれません。

適切性の観点から、SQLiteはSQLクエリをサポートする非常に洗練されたファイル形式と見なす傾向があります。データベースをWebアプリケーションから分離したい場合、SQLiteはこの場合に最適化されていないため、SQLiteを避ける傾向があります。要するに、SQLiteはいくつかのシナリオで使用するには拡張性が不十分であるため、いつか普及することを望んでいるWebサイトを運営している人は、SQLiteを使用して後で切り替えを余儀なくされるのではなく、拡張性のあるものから始める方が良いかもしれません。

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


ほとんどの外部Webサイトも同様です。EFのようなものが使用されている場合、データベースエンジンは交換できますが、おそらく最初からPostGresをお勧めします。
ロバートハーベイ

@RobertHarvey EFとは?
マイクペニントン

@MikePennington:エンティティフレームワーク。データベースの透過性を備えた、または少なくともドライバーを交換できる他のORMがあると思います。
ロバートハーベイ

1
同等のpythonicは、SQL Alchemy
Wyatt Barnett

「SQLiteは、SQLクエリをサポートする非常に洗練されたファイル形式と見なす傾向があります。」 完全な定義。
ワイルドカード

4

ITディレクターの帽子をかぶって、ここにいくつかの禁止事項があります。

  • データ破損のリスク。おそらく本物よりも理解しているかもしれませんが、これは非トランザクションファイルタイプのDBであり、最近のバックアップがあるかどうかを尋ねる以外に、悪い書き込みに頼る必要はほとんどありません。そういえば。。。
  • このことをどのようにバックアップしますか?ある方法で、私は良いコピーを持っていることを知っています。できればアプリをオフラインにせずに。
  • DBへのアクセスを保護するにはどうすればよいですか?私の一般的な理解は、SQL liteにはファイルシステムへのアクセス以外には何もありません。これはまともな開始ですが、すべてではありません。特に、DBAよりも多くの段階的な権限が必要なWebアプリの場合、または何もありません。

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


1
さて、バックアップはSQLite Backup APIを介して実行できます。サービス指向システムとは異なり、SQLiteクライアントはデータベースファイルと直接やり取りするため、SQLiteはデフォルトではそれほど安全ではないことを認識します。とはいえ、SQLiteはシステム障害から保護するためにジャーナルを使用し、ホストOSがSQLiteが使用するロックプリミティブを適切にサポートしていれば信頼できるはずです(ネットワークディスクI / Oはサポートしていません)。公式サイトには、SQLiteデータベースの破損につながるいくつかのシナリオがリストされています。
ブライアン

SQLiteはトランザクションです。バックアップAPIを使用するか、MediaWikiのバックアップスクリプトを適合させて オンラインバックアップを実行します。SQLiteのセキュリティモデルの一般的な理解は正しいです。公式のセキュリティアドバイスは、人々があなたのデータベースファイルにアクセスし、それに応じてWebアプリケーションを設計することができる方法を考える:「常識を使用」です。
イアン・サミュエル・マクリーン長老

@ブライアン-「このデータベースがどのように破損する可能性があるか」に専念するページ全体を持つ別のDBについて考えるのは難しいでしょう。sql liteプロジェクトは驚くべきものだと付け加えます-彼らはおそらくそのページを持っているでしょう。なぜならそれらは一種のナッツであり、また実動コードのすべての行に対して10行のテストコードのようなものを持っているからです。
ワイアットバーネット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.