Herokuは、問題が発生する可能性があるため、これに反対するようアドバイスしています。私はSQL初心者ですが、さまざまなデータベースを使用することで発生する可能性のある問題の種類を説明できますか?
3 に答える
しばらくの間、開発ではsqlite3を使用し、本番環境ではpostgresを使用していましたが、最近はどこでもpostgresに切り替えました。
両方を使用する場合の注意事項:
sqlite3とpostgresには違いがあります。私が遭遇した一般的なことは、postgresがクエリの型についてより厳密であるということです(
where :string_column => <integer>
sqliteでは正常に動作し、postgresでは壊れます)。開発者がsqliteであり、SQLエラーのために本番アプリがダウンしたかどうかが重要な場合は、postgresを使用するステージング領域が必要です。Sqliteは、ローカルマシンでのセットアップがはるかに簡単であり、db/ディレクトリ内の.sqliteファイルを削除/移動できるのは素晴らしいことです。
taps
herokupostgresデータをローカルのsqliteデータベースにミラーリングできます。データベースが大きくなるにつれて、処理速度は大幅に低下し、数十のテーブルと10万以上の行で、復元に20分以上かかり始めます。ilike、新しいキー/値ストア、全文検索などのpostgres機能は利用できません
広くサポートされているSQL機能のみを使用する必要があるため、アプリをmysqlに移行する方が簡単な場合があります
では、なぜ切り替えたのですか?いくつかのpostgresのみの機能が必要で、テストでは検出されなかったバグをヒットし続け、本番データベースをより高速にミラーリングできる必要がありました(pg_restoreはタップの場合は20分以上かかります)。私のアドバイスは、単純さのために開発でsqliteを使い続け、その後、必要なときに/必要に応じて切り替えることです。開発のためにsqliteからpostgresに切り替えるのは、postgresを設定するのと同じくらい簡単です。待つことによる複雑さは増しません。
データベースが異なれば、SQL標準の解釈と準拠も異なります。たとえば、SQLiteからPostgreSQLにコードをコピーして貼り付ける場合、すぐに機能しない可能性が非常に高くなります。基本的なクエリだけの場合は多分ですが、特定のものを扱う場合、完全な互換性の可能性は非常に低くなります。
一部のデータベースも、標準に準拠しています。これは、インターネットブラウザの戦場に似ています。いくつかのWebサイトを作成したことがある場合は、互換性がお尻の痛みであり、古いバージョンやInternetExplorerで機能させる必要があることをご存知でしょう。一部のデータベースは他のデータベースよりも古く、一部は標準よりも古いため、既存の大規模な顧客のサポートを失うため、単に廃棄して標準にジャンプすることはできない独自の方法があります(これは特にOracleと呼ばれるデータベースエンジンの場合です)。PostgreSQLはGoogleChromeのようなもので、標準への準拠はかなり高いですが、それでも独自のちょっとした癖がいくつかあります。SQLiteは、その名前が示すように、軽量のデータベースシステムです。
データベースエンジンも同じアクションを異なる方法で実行します。1つのデータベースと、それがどのように機能するか(クエリレベルよりも深い)を理解して理解することは価値があります。そうすれば、それを最大限に活用できます。
私は(一種の)同様の状況にありました。一般に、本番環境とテストに異なるデータベースエンジンを使用することは非常に悪い考えです。複数の理由があります
- DML、DDLステートメント、ストアドプロシージャ、トリガーなどのSQL構文の違い
- 一方のDBで実行されたパフォーマンスの最適化は、もう一方のDBでは有効になりません
- SQLiteは組み込みデータベースですが、PostgreSQLはそうではありません
- それらは同じデータ型をサポートしていません
- dbを構成/セットアップするためのさまざまな構文/コマンド。SQLiteはPRAGMAを使用します
本当に本当に正当な理由がない限り、1つのdbエンジンに固執する必要があります。何も思いつかない。