問題タブ [flat-file]

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 投票する
5 に答える
33844 参照

c# - C#で解析するEDIフラットファイル?

最初は SSIS を使用して EDI ファイルを解析することを考えていましたが、いくつかの手動 EDI パーサー (フィールド マッピング) を見て、C# でこの機能を自動化したいと考えています。

EDI ファイルの例:

サンプル EDI ファイル

0 投票する
2 に答える
1285 参照

sql-server-2005 - SQL Server 2005: 数千または挿入要求のパフォーマンスの向上。ログアウト-ログイン時間 = 120ms

SQL Server 2005 が ADO​​.NET 2.0 を使用してクライアントによって発行された要求をどのように処理するかについて、誰かが光を当てることができますか? 以下は、SQL トレースの短縮出力です。接続プールが機能していることがわかります (プールされている接続は 1 つだけだと思います)。私には明らかではないのは、以下の for ループの各ループの監査ログイン、SQL:BatchStarting、RPC:Starting、監査ログアウトなど、非常に多くの sp_reset_connection 呼び出しがある理由です。tempdb と master データベースの間で常に切り替えが行われていることがわかります。これにより、次の接続が ConectionString 引数に基づいてプールからフェッチされて作成されたときに、コンテキストが失われたと結論付けることができます。

15 ミリ秒ごとに、1 秒あたり 100 ~ 200 回のログイン/ログアウトを取得できることがわかります (プロファイラーによって同時に報告されています)。15 ミリ秒後、1 秒あたり 100 ~ 200 回のログイン/ログアウトが再び発生します。

これが本番環境での非常に複雑な挿入クエリにどのように影響するかを明確にする必要があります。私は Enterprise Library 2006 を使用しています。コードは VS 2005 でコンパイルされています。これは、親子行をグループ化する 10,000 行のフラット ファイルを解析し、アプリケーション サーバーで実行し、リモート SQL で 2 つのストアド プロシージャを実行するコンソール アプリケーションです。親レコードを挿入する Server 2005 は、Identity 値を取得し、それを使用して 2 番目のストアド プロシージャを 1 回、2 回、または複数回 (場合によっては数千回) 呼び出して、子レコードを挿入します。子テーブルには、5 ~ 10 のインデックスを持つ 1,000 万近くのレコードがあり、その一部は非クラスター化されています。挿入された詳細レコードをアーカイブ テーブルにコピーする非常に複雑な挿入トリガーがあります。全体として、1 秒あたり 7 回の挿入しかありません。つまり、5 万件のレコードに 2 ~ 4 時間かかる可能性があります。

したがって、私の質問は、会社が10万件のレコードをロードし、毎日の計画を立て、フラットファイル注文として来るクライアント要求を満たすためのSLAを持っているため、レコードの挿入を改善する方法があるかどうかです。すぐにインポートされます)。60,000 をインポートするのに 4 時間かかっていたものが、30 分に短縮されます。

DataAdapter の BatchSize を使用して複数のストアド プロシージャ コールを送信したり、SQL Bulk insert を使用して DataReader または DataTable から複数の挿入をバッチ処理したり、SSIS 高速ロードを使用したりしようと考えていました。しかし、インデックスの再作成と統計の人口を適切に分析する方法がわかりません。おそらく、これが完了するまでに時間がかかる可能性があります。さらに悪いことに、会社はレポートに最大のテーブルを使用し、他のオンライン処理とインデックスを削除できません。フィールドに値を設定してトランザクションを手動で管理し、その値を他のアプリケーションがコミットされた行を取得するために使用している新しい値に変更するトランザクション更新を行います。

この問題にアプローチする方法を教えてください。今のところ、別のデータベースに最小限のログを記録し、インデックスを持たないステージング テーブルを作成しようとしています。バッチ処理された (大規模な) 親子挿入を試みます。Production DB には単純な復旧モデルがあると思いますが、完全な復旧になる可能性があります。.NET コンソール アプリケーションで使用されている DB ユーザーが bulkadmin ロールを持っている場合、その一括挿入のログは最小限に抑えられます。テーブルがクラスター化されていて、挿入する多くの非クラスター化インデックスが行ごとにログに記録されることを理解しています。

接続プーリングは機能していますが、多くのログイン/ログアウトがあります。なんで?

for (int i = 1; i <= 10000; i++){ using (SqlConnection conn = new SqlConnection("server=(local);database=master;integrated security=sspi;")) {conn.Open(); using (SqlCommand cmd = conn.CreateCommand()){ cmd.CommandText = "tempdb を使用"; cmd.ExecuteNonQuery();}}}

SQL Server プロファイラー トレース:

監査ログイン マスター 2010-01-13 23:18:45.337 1 - 非プール
SQL:BatchStarting use tempdb master 2010-01-13 23:18:45.337
RPC:Starting exec sp_reset_conn tempdb 2010-01-13 23:18:45.337
監査ログアウトtempdb 2010-01-13 23:18:45.337 2 - プールされた
監査ログイン -- ネットワーク プロトコル マスター 2010-01-13 23:18:45.383 2 - プール
された SQL: BatchStarting は tempdb マスターを使用 2010-01-13 23:18:45.383
RPC: exec sp_reset_conn tempdb 2010-01-13 23:18:45.383 の開始

監査ログアウト tempdb 2010-01-13 23:18:45.383 2 - プール済み
監査ログイン -- ネットワーク プロトコル マスター 2010-01-13 23:18:45.383 2 - プール
された SQL:BatchStarting use tempdb master 2010-01-13 23:18:45.383
RPC:Starting exec sp_reset_conn tempdb 2010-01-13 23:18 :45.383
監査ログアウト tempdb 2010-01-13 23:18:45.383 2 - プール

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

c# - プロデューサー/コンシューマーパターンとSQLServerDBへのSqlBulkCopyを使用して複数のスレッドを使用してフラットファイルをチャンクで処理する

あなたが私に耐えてくれることを願っています。できるだけ多くの情報を提供したかったのです。主な問題は、値をポップし、それを使用して1つの大きなフラットファイルを処理し、ファイル全体が処理されるまで何度も繰り返し実行する複数のスレッドで使用される構造(スタックなど)を作成する方法です。ファイルに、2.000行のチャンクを使用して5つのスレッドで処理できる100.000のレコードがある場合、各スレッドは10のチャンクを処理します。

私の目標は、フラットファイル内のデータを移動することです(ヘッダー...サブヘッダー...詳細、詳細、詳細、...詳細、サブフッター、サブヘッダー...詳細、詳細、詳細、...詳細、サブフッター、 Subheader ... Detail、Detail、Detail、... Detail、SubFooter、Footer structure)をOLTP DBに入れ、シンプル(フルの可能性あり)から3つのテーブルにリカバリモードを設定します。1つ目はサブヘッダー行に存在するサブヘッダーの一意のキーを表し、2つ目は中間テーブルSubheaderGroupは、2000レコードのチャンクで詳細行のグループ化を表します(FKとしてサブヘッダーのID PKを持ち、3番目はサブヘッダーPKを指すFKを持つ詳細行を表す必要があります。

何万もの詳細行を持つことができ、ロード中に宛先テーブルで0に設定された特別なフィールドを使用し、ファイル処理の最後にこれを変更するトランザクションの更新を行っているため、手動のトランザクション管理を行っています。値を1にすると、ロードが終了したことを他のアプリケーションに通知できます。

このフラットファイルを、複数のスレッドで処理し、宛先テーブルのメタデータから作成されたIDataReaderを使用してSqlBulkCopyを使用してインポートできる、複数の等しい部分(同じ行数)に分割したいと思います。

SqlBulkCopyOptions.TableLockオプションを指定してSqlBulkCopyを使用するには、プロデューサー/コンシューマーパターン(以下のリンクで説明されている-pdf分析とコードサンプル)を使用したいと思います。 http://sqlblog.com/blogs/alberto_ferrari/archive/2009/11/30/sqlbulkcopy-performance-analysis.aspx このパターンにより、複数のプロデューサーを作成でき、同じ数のコンシューマーが行を消費するためにプロデューサーにサブスクライブする必要があります。

TestSqlBulkCopyプロジェクトのDataProducer.csファイルには、数千のレコードの生成をシミュレートするメソッドがあります。

このメソッドは、新しいスレッドのコンテキストで実行されます。この新しいスレッドが元のフラットファイルの一意のチャンクのみを読み取るようにし、別のスレッドが次のチャンクを処理するようにします。次に、コンシューマーは、SqlBulkCopy ADO.NETクラスを使用して、データ(ポンプされたデータ)をSQLServerDBに移動します。

したがって、ここでの質問は、各スレッドでどのlineFromからlineToを処理するかを指示するメインプログラムに関するものであり、これはスレッドの作成中に発生するはずだと思います。2番目の解決策は、おそらくスレッドがいくつかの構造を共有し、それらに固有の何か(スレッド番号やシーケンス番号など)を使用して共有構造を検索し(おそらくスタックと値をポップする(実行中にスタックをロックする)、次のスレッドが次に、次の値を取得します。メインプログラムはフラットファイルを取得し、チャンクのサイズを決定してスタックを作成します。

それで、誰かがいくつかのコードスニペット、複数のスレッドが1つのファイルを処理し、そのファイルの一意の部分のみを取得する方法に関する疑似コードを提供できますか?

ありがとう、ラッド

0 投票する
2 に答える
8805 参照

database - プレーンファイルよりもデータベースを使用する利点と欠点は何ですか?

プレーンファイルよりもデータベースを使用することの利点と欠点を見つけることができませんでした。助けてくれませんか?

0 投票する
13 に答える
66354 参照

sql - ファイルまたはデータベースサーバーからデータにアクセスする方が高速ですか?

フォルダとファイルで構成される静的データベースがある場合、これがCGIスクリプトで使用されることを考えると、アクセスと操作はSQLサーバータイプのデータベースよりも高速ですか?

ファイルやフォルダを操作する場合、パフォーマンスを向上させるための秘訣は何ですか?

0 投票する
2 に答える
122 参照

php - フラットファイルまたは MySQL を使用する PHP の切り離された/独立したセッションライブラリはありますか?

フラットファイルまたは MySQL を使用する PHP の切り離された/独立したセッションライブラリはありますか?

0 投票する
6 に答える
1403 参照

python - Pythonを使用した読み取り専用のバイナリフラットファイルストレージのオプション

私は、ストレージとプロセッサの速度が制限されている組み込みデバイスで使用するためのフラットファイルSKUデータベースのセットアップを任されています。

基本的に、保存する必要のあるデータは次のとおりです。

SKU説明場所価格数量

ファイルは数百万のレコードで構成されます。

最も重要な考慮事項は、ストレージスペースと取得時間です。レコードはSKUでのみ取得する必要があり、読み取り専用であるため、ファイルはSKUで並べ替えることができます。

Pythonでこのデータにアクセスしたいと思います。だから私の質問はこれに帰着します。

この機能を提供できる既存のPythonライブラリはありますか、それとも自分で作成する必要がありますか?

答えが私自身を転がすために来た場合、誰かがそうするための提案、または良い参考文献を持っていますか?

0 投票する
5 に答える
711 参照

python - 非フラット ファイルからのテキストの処理 (あたかもフラット ファイルであるかのように情報を抽出するため)

次の表で表すことができるコンピューター シミュレーションによって生成された経時的なデータ セットがあります (「var」は変数です)。

ただし、生成されたファイルは、次のような形式でデータ ファイルを書き込みます。

(python) スクリプトを使用してこの出力データをフラット テキスト ファイルに処理し、R、python、SQL、または awk/grep にインポートして情報を抽出できるようにしました。単一のクエリ (データがテーブルに変換された後の SQL 表記) を以下に示します。

これらのデータ ファイルはそれぞれ最大 100 MB になる可能性があり (私は何百ものファイルを持っています)、フラット テキスト ファイルの作成には時間がかかり、冗長な情報で追加のハード ドライブ領域を占有するため、より効率的なソリューションがあるのではないかと考えています。理想的には、余分なフラット テキスト ファイルを作成せずに、元のデータ セットを直接操作して、必要な情報を抽出することです...そのようなタスクのためのより簡単な awk/perl ソリューションはありますか? 私は Python でのテキスト処理にはかなり精通していますが、awk のスキルは初歩的で、perl の実用的な知識はありません。これらまたは他のドメイン固有のツールがより良いソリューションを提供できるかどうか疑問に思います。

ありがとう!

追記: うわー、みんなありがとう!みんなの答えを選べなくてごめんなさい @FM: ありがとう。私の Python スクリプトは、フィルター処理のステップを除いたコードに似ています。しかし、あなたの組織はクリーンです。@PP: 私はすでに grep に習熟していると思っていましたが、明らかにそうではありません! これは非常に役に立ちます...しかし、「時間」を出力に混在させると、greppingが難しくなると思います(私の例では、可能な抽出シナリオとして含めることができませんでした!それは私の悪いことです)。@ Ghostdog74: これは素晴らしいことです...しかし、「subjectA」を取得するために行を変更するのは簡単ではありませんでした. @weismat: よく言われます。@S.Lott:これは非常にエレガントで柔軟です-私はpython(ic)ソリューションを求めていませんでしたが、これは解析、フィルター、

繰り返しますが、私は皆さんに感謝しています - どうもありがとう。

0 投票する
8 に答える
6441 参照

sql - フラットファイルのシンプルで高速なSQLクエリ

SQLのような宣言型クエリ言語を使用してフラットファイルのシンプルで高速なクエリを提供するツールを知っている人はいますか?入力データは通常、クエリの実行直後に破棄されるため、ファイルをDBにロードするオーバーヘッドを支払う必要はありません。

データファイル「animals.txt」について考えてみます。

それぞれのユニークな動物の最高値を抽出したいとします。私は次のようなものを書きたいと思います:

私は以下を使用してほぼ同じ結果を得ることができますsort

そして、私はいつでもそこから立ち寄ることができますが、SQLのような言語が問題を非常にきれいに解決するように見えるとき、awkこれはすべて少し厄介な感じがします(抵抗できませんでした)。awk

入力データに基づいてテーブルを自動的に作成するSQLiteのラッパーを作成することを検討し、シングルプロセッサモードでHiveを使用することを検討しましたが、この問題は以前に解決されたと感じざるを得ません。私は何かが足りないのですか?この機能はすでに別の標準ツールによって実装されていますか?

やめろ!

0 投票する
5 に答える
1340 参照

php - アドバイス: データベースを使用しないシンプルな CMS を PHP で構築する

私は非常に単純な CMS を必要とするサイトに取り組んでいます。基本的に、クライアントが編集できるようにする必要があるテキスト ブロックがホームページにあります。現在のホスティング プランではデータベースを使用できません。データベースを含めると月額 X ドルの追加料金がかかりますが、このような基本的なシステムには不要だと思います。

このサイトは現在、Codeignitor を使用して構築されています。フラット PHP または TXT ファイルのいずれかを使用して CMS 部分を作成する予定です。検討する価値のある代替方法はありますか?また、長所/短所は何ですか?