問題タブ [acid]
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.
haskell - Acid-state では、正確には $(deriveSafeCopy 0 'base ''T) の意味
Acid が T 型の値を格納するには、次のように記述する必要があります。
しかし、このコマンドは正確には何をするのでしょうか?
database - SaaS アプリケーション用のスキーマフリー/柔軟な ACID データベース?
小規模企業の顧客向けの Web ベースの Clojure アプリケーションとして、VB ベースのオンプレミス (ローカルにインストールされた) アプリケーション (請求 + 在庫) を書き直すことを検討しています。これは、同様の取引を行う顧客向けの SaaS アプリケーションとして提供される予定です。
私はデータベースのオプションを検討していました。私の選択は RDBMS でした: Postgresql/MySQL。最初の 1 年で 400 ユーザーにスケールアップする可能性があります。通常、1 ユーザーあたり 1 日あたり 20 ~ 40 ページ ビューです。ほとんどの場合、静的ビューではなくトランザクション用です。各ビューには、データのフェッチとデータの更新が含まれます。ACID準拠が必要です(またはそう思います)。そのため、取引量は膨大ではありません。
私の好みに基づいてこれらのいずれかを選択することは非常に簡単でしたが、SaaS アプリの典型であると私が信じているこの 1 つの要件については、顧客/ユーザーを追加するにつれて、また顧客ごとにスキーマが変化します。ビジネス要件の変化 (最初は限られた柔軟性しか提供しません)。私は DB の専門家ではないので、考えたり読んだりしたことに基づいて、さまざまな方法でそれを処理できます。
- 複数のテナントをホストする単一の DB を使用して、MySQl/Postgresql で従来の RDBMS スキーマ設計を行います。また、顧客を追加したり、既存の顧客に変更を加えたりした場合に、将来の変更に対応できるように、各テーブルに十分な数の「自由に移動できる」列を追加します。これには、スキーマに小さな変更が加えられるたびに変更が DB に反映されるという欠点がある場合があります。Postgresql では、スキーマの更新をロックせずにリアルタイムで実行できることを読んだことを覚えています。しかし、このユースケースでどれほど苦痛であるか、またはどれほど実用的であるかはわかりません. また、スキーマの変更により、新しい/マイナーな SQL の変更も導入される可能性があります。
- RDBMS を使用しますが、データベース スキーマを柔軟な方法で設計します: エンティティ属性値に近いものを使用するか、単にキーと値のストアとして使用します。(Workday、FriendFeed など)
- 全体をオブジェクトとしてメモリ内に保持し、定期的にログ ファイルに保存します (例: edval、lmax)。
- MongoDB や Redis などの NoSQL DB を使用してください。しかし、私が収集できることに基づいて、それらはこのユースケースには適しておらず、ACID に完全に準拠していません。
- VoltDb や JustoneDb (クラウドベース) など、SQL および ACID に準拠した動作を保持し、「新世代」の RDBMS である NewSQL Db を使用してください。
- 私は neo4j(graphdb) を見ましたが、それがこのユースケースに適合するかどうかはわかりません
私のユースケースでは、スケーラビリティや分散コンピューティング以上に、「スキーマの柔軟性 + ACID + 適度なパフォーマンス」を達成するためのより良い方法を検討しています。私がネットで見つけたほとんどの記事では、スキーマの柔軟性がパフォーマンス (NoSQL DB の場合) とスケーラビリティにつながる原因であり、ACID/トランザクションの側面は除外されています。
これは「スキーマの柔軟性と ACID」トランザクションの「どちらかまたはどちらか」のケースですか、それともより良い方法はありますか?
mysql - MyISAM テーブルで START TRANSACTION を実行中にエラーがスローされますか?
MyISAM テーブルでトランザクションの開始を試みたところ、「クエリ OK、0 行が影響を受けました (0.00 秒)」という応答がありました。
しかし、MySQL のすべてのバージョンで同じことが起こるかどうかはわかりません。
トランザクションに関係するクエリの非トランザクション モードでの動作に関する仕様はありますか?
database - NoSQL データベースが ACID に準拠していないのはなぜですか?
重複の可能性:
ACID 準拠の NoSQL はありますか?
NoSQL データベースは ACID に準拠していないと聞きましたが、これはなぜですか?
c++ - ftruncate()は非同期ですか?
書き込み中に電源障害が発生した場合でも、ファイルにアトミックに追加する手段を提供するクラスをC++で書き込もうとしています。
まず、現在のファイル位置(ファイルの先頭から64オフセット、バイト単位)を別のジャーナルファイルに書き込みます。次に、要求されたデータを日付ファイルの最後に書き込みます。最後に、ジャーナルファイルでftruncate()を呼び出します(切り捨てられたサイズを0に設定します)。
主なアイデアは、このクラスが空でないジャーナルファイルを含むファイルを開くように要求された場合、書き込みが中断されたことを認識し、ジャーナルファイルから最後の書き込みの位置を読み取ってその場所にfseekできるということです。最後の部分的な書き込みは失われますが、ファイルが破損してはなりません。
残念ながら、ftruncate()は非同期のようです。実際には、ftruncateの後にfflush()とfsync()を呼び出しても、大量の書き込みを行っている間、ジャーナルが最大数百バイトに成長するのがわかります。最終的には常に0になりますが、常にサイズ0またはサイズ8のいずれかで表示されると予想していました。
ftruncateを完全に同期させることは可能ですか?それとも、ジャーナルを使用するためのより良い方法はありますか?
database-design - データベースはアトミック I/O をどのように実行しますか?
Oracle、SQL Server などのデータベースは、データの整合性が非常に優れています。データを保存するか失敗する (つまり ACID である) ことがわかっているデータ ストアを書きたい場合は、その下にある MySQL のようなデータベースを実際のストアとして使用します。これらの問題は既に解決されているからです。
しかし、コンピュータ科学の卒業生ではない私は、ACIDが実際に非常に低いレベルでどのように機能するのか疑問に思っています。たとえば、Oracleは常に「オンラインREDOログ」にデータを書き込み、アプリがトランザクションをコミットする必要があることを通知した時点で「コミット」を実行することを知っています。
ズームインして理解したいのは、この「コミット」段階です。「もう1バイト」をディスクに書き込むだけの場合ですか、それともa0
をaに反転し1
て、特定の行が正常に保存されたと言うのですか?
mysql - 大規模なデータベースで重複するエントリを見つけようとするMySqlクエリを改善するにはどうすればよいですか?
重複するエントリを見つけるには、大規模なデータベース(Snortアラート)でクエリを実行する必要があります。しかし、以下のクエリを思いついたのですが、実行に時間がかかります!
上記のクエリは、同じアラートip_dstを検索しようとし、アラート timestamp
がlayer4_dport
複数回発生した場合に発生します。私はそれが明確であることを願っています!
それを効率的にするためのヒントやコツはありますか?
oracle - OracleでNOLOGGINGを使用するとACIDが壊れますか? 特に停電時
Oracle で NOLOGGING を使用する場合、新しいレコードを挿入する場合などに使用します。データベースは停電から正常に回復できますか? 挿入中にランダムにダウンした場合。
メインのデータファイルが物理的に破損した場合に回復に使用される REDO ログの使用とは対照的に、UNDO ログがそのような回復に使用されると述べているのは正しいですか。
haskell - Haskell: Yesod と状態
Toy URL Shortenerのコードを読んでいました。ただし、頭を悩ませることができない重要な部分があります。
次のコードがあります。
テスト目的で、私は自分のアプリで次のようなものを書きました:
次に、変更してコンパイルできます
に
そして、次のようにしてハンドラーで状態の読み取りを行うことができました
記事にインスパイアされacid <- fmap state getYesod
ました。しかし、私は書き込みの方法を知りませんでした。
私もやってみました:
しかし、私はこれで遠くまで行きませんでした。
私はAcidState
単純な同様の例をいくつか実行するだけでどのように機能するかを理解しようとしていAcidState
ました.すべてをメモリに保持しているので、同じことができるはずですか?
ここで何が起こっているのかについての一般的な説明と、おそらく私がどのようにポイントを逃しているかについて、非常に感謝しています。
java - Hibernate Search + Infinispan Directory を使用したトランザクション ACID プロパティ
私は次の設定をしています:
- JPA (2.0) から Hibernate (4.1)
- 第 2 レベルのキャッシュとしての Infinispan (5.1)
- Hibernate に接続された Hibernate Search (4.1)
- Hibernate Search (Lucene) のディレクトリとしての Infinispan
- Infinispan ディレクトリの JDBC CacheStore を接続しました
- エンティティと Lucene ディレクトリの両方を格納する PostgreSQL (9.1) データベース。
- トランザクションマネージャーとしての Bitronix (2.1.2)
- 私は Java EE を使用していませんが、Spring (3.1) を使用しています。
Infinispan as Second Level Cache は問題ありません。回復は必要なく、キャッシュの性質上、独自のトランザクションで変更を読み取ることができます。
ソースコードを何時間も読んだ後、エンティティを更新すると、Hibernate Search は Lucene ディレクトリを更新しませんが、トランザクションの最後に (コミットした場合)、更新したばかりのテキストを検索したいと思いました。同じトランザクション内で、私はできませんか?
さらに、トランザクションの完了後、Hibernate Search は別のスレッドでディレクトリの更新を行います。ディレクトリの更新の 1 つが失敗した場合、Lucene は私のエンティティと一致しなくなりますか? また、更新がディレクトリにディスパッチされる前に何かが発生し、回復が必要になった場合、それらの更新は失われますか?
この「最初の」トランザクションが正常にコミットされたと仮定すると、更新は Infinispan ディレクトリに送信されました。ここで新しいトランザクションが開始されます。誰によって?Lucene には、JMS を使用して更新を送信するオプションがあります。オプションがアクティブ化されているとします。そのため、JMS メッセージは新しいトランザクションを初期化します。
Infinispan は、受信した更新を使用してメモリ ディレクトリを変更しますが、永続的な CacheStore は、コミット後、このトランザクションの完了時に再び更新されます。したがって、jdbc CacheStore の更新中に何かが発生した場合、更新されずに放置される可能性がありますが、Infinispan メモリ ディレクトリにはそれらが適用されます。
私の質問は、私が使用しているすべてのモジュールがトランザクションをサポートし、グローバル トランザクション (XA) への参加もサポートしていることを考えると、真のトランザクション性を実現する方法はあるのでしょうか? 多分私はそれを見ていないだけです。