問題タブ [database-versioning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
119 参照

node.js - バージョン管理されたデータと差分エンドポイントを使用した REST API : 帯域幅とパフォーマンスの最適化

私のNodeJSプロジェクトはSailsJSに基づいており、それ自体がExpressJSを使用しています。

その API は、モバイル アプリからデータを取得するために使用されます。

トリッキーな部分は、データベースに変更があるたびにクライアント アプリにデータ ツリー全体を取得させたくないということです。

クライアントは、既に取得しているデータとサーバー上のデータの差分をダウンロードするだけで済みます。

それを実現するために、サーバーで git を使用することを考えました。つまり、リポジトリを作成し、すべてのエンドポイントを json ファイルとしてリポジトリに保存します。保存するたびに、自動コミットがトリガーされます。

次に、commit sha をパラメーターとして受け入れ、それと git HEAD との差分を返す特定の API エンドポイントを作成できます。

ウィリアム・ベントンによるこの投稿は、この考えで私を慰めました.

上記の言語とフレームワークに基づいて、これを機能させるのに役立つヒントを探しています。

  • これの概念実証を実際に見たいのですが、見つかりませんでした
  • NodeJS で git を使用する簡単な方法はまだ見つかりませんでした。
  • IONIC フレームワークで開発されたクライアント アプリで返された差分を解析する方法がわからないため、AngularJS.

注 : API は読み取り専用です。すべての DB の移動は、少数のユーザーが使用するカスタム Web バックエンドによってトリガーされます。

0 投票する
0 に答える
226 参照

oracle11g - データの改訂/バージョン管理のベスト プラクティス

改訂の効果的なプロセスを定義するのに苦労しています。複数のテーブルにまたがるデータがあります。削除や更新はできません。同じデータの新しい課題を作成する必要があります。すべてのリビジョンなどを含む履歴テーブルの解決策は知っていますが、ブログプラットフォームなどの単純な構造のリビジョンを保持したい限り、それはうまくいくようです。

多くの複雑な構造を持つデータベースがあり、最も単純な構造が以下のようになっている場合はどうなるでしょうか。

リレーション付きのシンプルなテーブル

tableA で何かを変更すると、古いデータを履歴テーブルに保持できます。しかし、TableA のレコードを定義する TableB の何かを変更するとどうなるでしょうか? TableA のコピー (つまり、新しい ID) を作成し、その基礎となる構造を再作成する (新しい ID を増やす) ことをほとんど強制されます。間違いを修正したり、周辺データを追加したりするたびに新しい ID を作成するプロセス全体が、うまくいきません。

そのような場合の良い習慣はありますか?XML で改訂された古いデータ構造全体を維持することについてどこかで読みましたが、その慣行はスキーマの変更に消極的であり、簡単に照会することはできません。Flashback などのテクノロジーも、私たちのニーズをすべてカバーしているわけではありません。

ヒント: Oracle v11.2 を使用しています。

0 投票する
1 に答える
645 参照

fluent-migrator - FluentMigrator - テーブルのアクセス許可を変更する方法は?

MSSQL データベースのデータベース移行ツールとして FluentMigrator の使用を開始しました。CRUD テーブル操作とシードに関する私のニーズのほとんどに対応しているようです。

ただし、テーブルを作成した後、テーブルのアクセス許可を構成する方法が見つかりません。

GRANT PUBLIC SELECT ON BLAH ステートメントを使用して .sql を実行するだけでよいことはわかっていますが、代わりに流暢な API を使用したいと考えています。

流暢な API を使用してアクセス許可を変更する方法を知っていますか?

0 投票する
1 に答える
416 参照

sql-server - RoundhouseE (データベース移行ユーティリティ) は、SQLCMD モードでの SQL Server スクリプトの実行をサポートしていますか?

この優れた Roundhouse データベース移行ツールが、SQLCMD モードで SQL Server スクリプトをサポートしていれば素晴らしいことです。Visual Studio Data Tools は、SQLCMD モードでスクリプトを生成します。これらの SQLCMD モード スクリプトを変更せずに RoundHouse 移行に追加するとよいでしょう。

0 投票する
1 に答える
396 参照

sql-server - 移行を伴う VCS のデータベース

ほとんどがソース管理下にあるデータベース (SQL Server 2008 R2) があります (したがって、DB オブジェクトごとに 1 つのファイルが、テーブル、ビュー、ストアドプロシージャなどのフォルダーにグループ化されます)。現時点では、変更は SQL アップグレード スクリプトを記述して行い、次にいくつかの自作バッチ ファイルを実行して実行します (非常にエラーが発生しやすい)。

そのため、移行によって問題が解決するかどうかを調べていますが、ベスト プラクティスの適切な説明をまだ見ていません。ほとんどのブログ投稿は、空のデータベースを想定しているように見えますが、いくつかの移行 (通常は CreateUsers と CreateRoles) を行いますが、その後に何が起こるかを示していませんか? 何百ものストアド プロシージャがある場合、現在のようにそれらをオブジェクトごとの .sql ファイルに格納し、移行でそれらのファイルを参照する必要がありますか? 状態ベースの展開と移行ベースの展開を混同していませんか?

言い換えれば、移行に移行する場合、データベース全体を特定の既知の状態 (スナップショット #1) (数百のテーブルと数百のストアド プロシージャを含む) で作成する単一の SQL ファイルがあれば、大量の主要なプロジェクトの過程で移行し、そのプロジェクトの最後に新しいスナップショットを作成して、それをソース管理に追加しますか? VCS の唯一のものはスナップショットであり、スナップショット間を移動する移行ですか? しかし、個々のオブジェクトをバージョン管理していない場合、Users テーブルなどの履歴をどのように追跡できるのでしょうか?

0 投票する
1 に答える
1298 参照

database-design - 履歴テーブルを使用しないデータベースのバージョン管理

テーブルのレコードレベルのバージョン管理について、この投稿を行っていました。アーキテクチャが履歴テーブルの使用法を扱っていることに気付きました。ただし、私のシナリオではロールバックは必要ありませんが、特定の時点のレコードを取得する必要があります。これは、バージョン管理に単一のテーブルを使用する設計を試みた場所です。これは必要最小限のテーブル データであることに注意してください (制約、インデックスなどはありません)。列に group by 句が含まれているため、id に基づいてインデックスを作成する予定です。

たとえば、私はテーブル Test を持っています

id は識別子です。

modstamp はデータのタイムスタンプです (非 null)

上記の列に加えて、テーブルには簿記の列が含まれます

local_modstamp は、レコードが更新されたタイムスタンプです

del_modstamp は、レコードが削除されたときのタイムスタンプです

バックアップ中に、すべてのレコードがソースから取得され、レコードの値が local_modstamp = null および del_stamp = null になる場所に挿入されます。

レコードが取得されたら、データを処理するためのシナリオを次に示します (参照時間[ref_time]がプロセスが実行される時間であると仮定します)。

  1. 通常どおり挿入します。

  2. 更新: local_modstamp = ref_time で最新のレコードを更新します。次に、新しいレコードを挿入します。クエリは次のようになります: update test set local_modstamp = where id = and local_modstamp is not null and del_modstamp is not null insert into test values(...)

  3. 削除: 最新のレコードを del_modstamp = ref_time で更新します。update test set del_modstamp = where id = and local_modstamp is not null and del_modstamp is not null

この設計は、local_modstamp が null ではなく、del_modstamp が null ではない最新のレコードを取得することを目的としています。ただし、クエリ (最も内側のクエリ) を使用して特定の時点を取得しようとしている問題に遭遇しました。

テーブルの最新のレコードを識別するために null をプレースホルダーとして使用するという間違いを犯したようです (そうですか?)。既存の設計を使用して特定時点の記録を取得する方法はありますか?

そうでない場合、可能性のある解決策は、local_modstamp を最新のレコードに設定することだと思います。これには、更新の場合に max(local_modstamp) を使用してロジックを更新する必要があります。特定の時点のデータを取得するために、既存のアーキテクチャを維持できますか?

私は現在 SQL-Server を使用していますが、この設計は他のデータベース製品にも拡張される可能性があります。ベンダー固有のハックを使用する代わりに、より一般的なアプローチを使用してデータを取得するつもりです。