0

生のテキスト ファイルに大量のデータが保存されているプロジェクトに取り組まなければなりません。各フィールドはそのサイズで区切られています。つまり、フィールド 1 は位置 0 から 3 などです (CSV ファイルではありません)。

ファイルには 100 万行を超える行が含まれています。

データベースに保存する必要があります。何が最善の方法であるかについていくつかの投稿をチェックしましたが、テクノロジーの選択はアルゴリズムよりも重要ではないようです. Php、Perl、または Python を使用できます。気軽に何でも提案してください。

さて、ファイル構造自体は少しトリッキーです。以下に例を示します。

A880780093vvd47aa8db20d4133e6f587cf046054e8316000212093659D11001 
C880780093d47aa8db20d4133e6f587cf046054e831600021209365907000 0711012012C    
A880780093vvcaacb22bfb091127f9c9e14175d858ee25000212093681O11001 
C880780093caacb22bfb091127f9c9e14175d858ee2500021209368107000 0611012012ADI  
D880780093caacb22bfb091127f9c9e14175d858ee250002120936810700011012012HK00210Z            
A880780093vvb92f937a3fd1268c1478deb174a1bfca86000212093750S11041 
C880780093b92f937a3fd1268c1478deb174a1bfca8600021209375007000 3911012012PB   
C880780093b92f937a3fd1268c1478deb174a1bfca8600021209375007000 3911012012B 1002
E880780093212093750b92f937a3fd1268c1478deb174a1bfca8600007000110120120100000127000000000000
C880780093b92f937a3fd1268c1478deb174a1bfca8600021209375007000 3911012012B 

基本的にはAからFまでの6種類のラインがあります。行 A はブロックのヘッダーです。行 B と C は、長さとフィールドがまったく同じです。行 D は、行 C を補完する可能性があります。つまり、行 C に接続されていますが、必須ではありません。また、線 C のない線 D は存在できないことも意味します。線 E と F は独立した線であり、線 A にのみ接続されています (すべての線はブロックの一部であるため、すべて線 A に「接続」されるか、または仮想ブロック ID)

次のことができるモデルを作成するにはどうすればよいでしょうか: - いくつかの基準に基づいていくつかの行のデータを変更します (つまり、行 C の 5 番目の文字が 4 の場合、10 番目は 7 になります) - 変更されたものを追跡します。 (つまり、それらを元の自分自身にリンクできるようにしたい) - 元のテキスト ファイルを再構築し、元の行を削除して、変更されたバージョンに置き換えることができる - ブロックに新しい行を挿入できる: if 行C には 7 番目の文字 = 0 があり、その下に D 行を追加します。- 行の順序をそのまま維持します。(1行挿入すると、次の行の順番が1つ繰り上がります)

5 つの行テーブルすべてで parent_id 外部キーを使用することを考えました (同じフィールドがないため、行の種類ごとに 1 つ)。したがって、行の順序の問題は解決されますが、変更されたファイル バージョンの再構築に行き詰まっています。また、ファイルをブロックに分割し(行Aから開始)、行をブロックIDにリンクすることも考えました...

どんな提案でも大歓迎です!

よろしくお願いします!

4

1 に答える 1