質問:
大量に直接、データを追加するデータを変更、データの削除、それは比較的大きな取引になる場合データベースプログラミングの開発では、状況は時々 、トランザクションログが比較的大きい、大量のデータが発生し、長い時間のために時間がかかりその後、通常の操作では、いくつかの障害物が発生します。ない限りがして足の上にライブラリを削除するだけでなく、真剣に常にKabbahのクラッシュを感じ、ユーザーエクスペリエンスに影響を与えます。その後、我々は、高ボリューム操作で小ロットトランザクション処理操作にすることができ、バッチ比較的短い時間、渋滞を減らします。大小、および小型の。例えば:5分の実行に必要な多数のトランザクションは、その後5分間ブロックした場合、10の小バッチに分割した場合の小群あたり0.5分、ユーザエクスペリエンスを向上させる、長期閉塞の可能性を減少させます。
時には我々は、バルクデータ処理のためのC#Excelを使用して、例えば、達成するために、他のプログラミング言語で、論理バッチ処理を必要とするだけでなく、データベースプログラミングで、実際には、少しリラックスするために彼らの目を大きく。
多くに、この問題を見つけるために、どのように、我々は確かに、あなたは異なるプログラミング言語の構文に従ってアルゴリズムを再実装する必要はなく、プログラミング言語を変更するよりも、共通しているどのようなプログラミング言語に関係なく、統一された式を持っていないことを願っています。ユニバーサルに行くことができ、迅速な開発目的を達成するために、書かれた表現、。
そして、多くを聞いて、これは解決するために中学校の代数のように思える:
データaの知ら総量、データの各バッチの量は、所望のバッチxを見つける、bは?
A 10,000 B、388888を想定しています。
解決法:
方法1(推奨されません):
データベースプログラミング、ほとんどの人はおそらく習慣を考えてはいる場合:
最初/ Bとの一部を行うことに加えて、得られたが、例えば、ここに38があり、
その後、とき%の場合を判断するために使用しますbがゼロでない場合、バッチはない万が、ではないが必要バッチの38、39のバッチで、ここでは例えば8888であり、1を加え、残りの不可分部分はゼロです。
T-SQLを使用して実装:@a / @b +ケース際@a %@b> 0、その後1つのそれ以外0エンド
短所:
- 明らかに、このような表現ではなく、長い、非常に単純ではありません。
- そして、C#実装に切り替えた場合、しかし、ことは場合をサポートし、再実装関数は式を変更する必要はありません。
方法2(推奨):
直接四則演算によれば、発現のために(@a + @b - 1)/ @b
この表現、それらの方法ブロガーは、次のように説明されて発生します
数は最初から、最初のものであるのでだからここ代わりに0から9999までの1から10,000バッチ1、@a - 1、点プログラミング実践から番号0を開始することであり、
そして+ @bは、番号9999 0のいずれか、からです10,000語の各バッチは、あるデータ<1の量で割ったが、現実は1つのバッチ、およびバック必要なときにそれ。
利点:
- 単純な四則演算を使用して、いかなる場合決意条件、簡潔なコード。
- C#コードは、ちょうどC位へのサポート等の条件が決定された場合場合場合せず、対応するカテゴリーCの#変数のパラメータを変更する必要があり、他の言語を容易にします。
方法3 (推奨):
直接四則演算によれば、発現のために(@a - 1)/ @b +
1 この式は、その方法は、ブロガーが企図されている次のように説明した:
番号1、1から始まるためバッチので、ここではなく、0から9999までの、1〜10,000 @aである- 1、点プログラミング実践から番号0を開始することであり、
そしてA +は、で割った0から9999までの数のいずれか、からですデータ量10,000語の各バッチは、<1であるが、現実には、ある1つのバッチ、およびバック必要なときにそれ。
利点:
- 単純な四則演算を使用して、いかなる場合決意条件、簡潔なコード。
- C#コードは、ちょうどC位へのサポート等の条件が決定された場合場合場合せず、対応するカテゴリーCの#変数のパラメータを変更する必要があり、他の言語を容易にします。
階層2及び図3に示すように、代数の観点から、関係は等価である:
ブラケットを除去した後、方法2は、関係ある:@a / @b + 1 - 1 / @bの
ブラケット3を除去した後の方法は、関係式です:@ / @b - 1 / @b + 1
スクリプト:
/ * 問題:データAの合計量を与え、データの各バッチの量は、所望のバッチXを見つける、bは?A 10,000 B、388888を想定しています。 スクリプトソース:HTTPS://www.cnblogs.com/zhang502219048/p/11108723.html * / DECLARE @a int型 = 388 888 、 @b INT = 10000 、 @ X1 のint 、 @ X2の int型、 X3の@ int型 - 1 (推奨されません):4つの操作に加えて、剰余演算、そして状態が長くて複雑なスクリプトになり、他のプログラミング言語への移植を助長されていませんと判定された場合には SELECT @ X1 = @a / @b + ケース とき @a % @b > 0 、その後 。1 他 0 エンド - 方法2(推奨):4つだけの操作を達成するために、 SELECT @をX2 =(@aを + @b - 1)/ @b - 方法3(推奨):4つだけの操作を達成するために、 SELECT @のX3を =(@a - 1)/ @bの + 1。 - 結果を参照 SELECT @のX1 AS X1、@のX2 AS X2、@のX3 AS X3を
技術的なブログのブロガー「自動的に連続した数字と再帰によって書かれた日付を生成するために、CTE共通テーブル式の一般的な機能を使用してSQL Serverが 10Wを確認するために、」連続バッチ番号を生成する方法について説明し、我々は直接データの量を生成しますこのブログ「バッチ機能を計算する四則発現を達成するために簡単なスクリプトを書くためのSQL Server(C#や他のプログラミング言語は、直接この共通の表現を使用することができます)表現を計算する」バッチは正しいです。
問題は、に拡張:
データaの知ら総量、データの各バッチの量は、各バッチXを求めてデータ関連、Bのですか?A 1000 B、100000を想定しています。
検証スクリプト:
/ * 問題:で知られているデータの合計量、データの各バッチの量は、各バッチXを求めるデータが関連、Bのですか?A 1000 B、100000を想定しています。 著者:zhang502219048 スクリプト出典ます。https://www.cnblogs.com/zhang502219048/p/11108723.html に基づいてスクリプト:HTTPS://www.cnblogs.com/zhang502219048/p/11108991.html * / DECLARE @a int型 = 100000 、 @b INT = 千 選択VID - 四則演算に加えて、モジュロ演算、条件が長くて複雑なスクリプトになり、他の携帯を助長ないと判定された場合:方法1(推奨されていません)プログラミング言語 、X1 = VID / @b + ケース VID %@b > 0 、その後。1 他0 エンド - 方法2(推奨)のみ四則演算が実現され 、X2 =(VID + @b - 1)/ @b - 方法3(推奨)のみ四則演算が実現され 、X3 =(VID - 。1)/ @b + 1。 INTO に#t から fun_ConcatStringsToTable(1、@a ) - バッチとに関連するすべてのデータを参照 SELECT * から#tを - 計算結果が一致するバッチされているかどうかをチェックする SELECT DISTINCT ケース 場合 X1 = X2 とをX2 = X3 その後、 「右!「 他の 」間違いました!「 エンド として結果 から#tを ドロップ テーブル #tを
検証スクリプトの結果:
要約:
ここで紹介するのバッチを計算する新しいアイデアのためのブロガー、あなたはそれが役に立つ見つけた場合、その後、あなたが直接使用することができ、それを行うことはそんなに簡単ではないのですか?型にはまらない、バッチ計算アルゴリズムのための新しいアイデアを注入感じます。
[Reserved注ミョンテキスト出典:https://www.cnblogs.com/zhang502219048/p/11108723.html ]