私は感情的な返信や誇張を避けようとしますが、このページに表示されているsqliteに関する知識が不足していることに本当に驚いています。さまざまなデータベース実装がさまざまなニーズに対応し、提供する運用仕様から、sqlite3はニーズに理想的であるように思われます。詳細に:
sqlite3は完全にACIDに準拠しています。つまり、アトミックコミットが保証されます。これは、MySQL(それが良いかもしれません)でもOracleでも自慢できないことです。詳細はこちら
また、sqlite3には、ファイルロックと同時実行のドキュメントで説明されているように、最大の同時実行性(スレッドセーフでもあります)を保証するための一見シンプルなメカニズムがあります。
彼らの(sqlite3開発者の)独自の見積もりによると、sqlite3は1秒あたり最大50,000のINSERTが可能です。これは理論上の最大値であり、ディスクの回転速度によって制限されます。ACID準拠では、データベースコミットがディスクに書き込まれたことを確認するためにsqlite3が必要です。したがって、INSERT、UPDATE、またはDELETEトランザクションではディスク全体を2回ローテーションする必要があります。これにより、7200rpmディスクドライブでのトランザクション数が実質的に60/sに削減されます。これは、別の回答にリンクされているsqlite FAQで概説されており、この事実から、本番環境でのエンジンのデータスループット機能についてある程度のアイデアが得られます。しかし、同時読み取りと書き込みはどうですか?
以前にリンクされたファイルロックと同時実行のドキュメントでは、sqlite3が「ライターの起動」を回避する方法について説明しています。これは、データベースの読み取りアクセスが多いため、データベースへの書き込みを試みるプロセス/スレッドがロックを取得できない状態です。ロック状態のSHAREDからPENDING、EXCLUSIVEへのエスカレーションは、sqlite3がINSERT(またはUPDATEまたはDELETE)ステートメントに遭遇し、次にCOMMITに遭遇したときに発生します。つまり、完全なデータベースロックは、実際の書き込みが実行される前の最後の瞬間に遅延します。ファイルロックを処理するためのsqliteの巧妙なメカニズムの結果は、ライターがキューに参加した場合(PENDINGロック)、既存の読み取り(SHAREDロック)が完了し、ライタープロセスにEXCLUSIVEロックを付与してから、読み取りを再開することを意味します。これには数ミリ秒しかかかりませんが、
EXCLUSIVEロックでのデフォルトのsqlite3WAITは3秒だと思います。したがって、1秒あたり60トランザクションが妥当な予想であり、平均して10秒に1回データベースに書き込もうとしているという事実を考えると、sqlite3は適切だと思います。タスクまでは、トラフィックが500倍に増加した場合にのみ、クラスタリングの導入が必要になります。
悪くはなく、要件に最適です。