0

テーブルに300k行を挿入するクエリを書いていますが、挿入の実行中に404ファイルまたはディレクトリが見つかりませんというエラーが発生します。私は紺碧の初心者なので、愚かなコードを書いたかもしれません

ここでDynamicTableEntityオブジェクトを作成します:

       Test t = new Test();
       t.CreateTable("table2");
        Dictionary<string, EntityProperty> dic;
        Random random = new Random();

        ArrayList part1 = new ArrayList();
        ArrayList part2 = new ArrayList();
        ArrayList part3 = new ArrayList();
        ArrayList part4 = new ArrayList();
        ArrayList part5 = new ArrayList();
        ArrayList part6 = new ArrayList();
        DynamicTableEntity dte;
        Stopwatch sw = new Stopwatch();
        Guid guid;
        sw.Start();
        for (int i = 0; i < 300000; i++)
        {

            dic = new Dictionary<string, EntityProperty>();

            dic.Add("count", new EntityProperty(i));
            dic.Add("rand1", new EntityProperty(random.Next()));
            dic.Add("rand2", new EntityProperty(random.Next()));
            dic.Add("rand3", new EntityProperty(random.Next()));
            if(i!=5)
            dic.Add("rand4", new EntityProperty(random.Next()));
            else
                dic.Add("rand4", new EntityProperty(1234561));


            if (i % 2 == 0)

                dic.Add("randInt", new EntityProperty(random.Next()));
            else
                dic.Add("String", new EntityProperty("This is a string" + i));

            guid = Guid.NewGuid();

            dte = new DynamicTableEntity("0" + (i % 3), DateTime.UtcNow.Ticks.ToString() + guid + i);

            dte.Properties = dic;

            if (i % 6 == 0)
                part1.Add(dte);
            else if (i % 6 == 1)
                part2.Add(dte);
            else if(i%6==2)
                part3.Add(dte);
            else if (i % 6 == 3)
                part4.Add(dte);
            else if (i % 6 == 4)
                part5.Add(dte);
            else if (i % 6 == 5)
                part6.Add(dte);


            if( (i + 1) % 600 == 0)
            {

                t.Insert("table2", part1, part2, part3, part4, part5, part6);
                part1.RemoveRange(0,100 );
                part2.RemoveRange(0, 100);
                part3.RemoveRange(0, 100);
                part4.RemoveRange(0, 100);
                part5.RemoveRange(0, 100);
                part6.RemoveRange(0, 100);
            }



        }

そして、これが挿入実行コードです:

        CloudTable table = _tableClient.GetTableReference(tableName);
        TableBatchOperation tablebatchoperation;
        int i = 0, j = 0;
        if (created == false)
            table.CreateIfNotExists();

        foreach (ArrayList k in l)
        {
            tablebatchoperation = new TableBatchOperation();

            foreach (DynamicTableEntity dte in k)
            {
                tablebatchoperation.Insert(dte);
            }
            table.ExecuteBatch(tablebatchoperation);
        }

私はあなたの助けに感謝します

4

2 に答える 2

1

ここで考えられる問題は、100 を超えるアイテムを含むバッチ操作を実行していることです。次のようなことを試してください (コードは最適化されていませんが、画像は得られます):

    foreach (ArrayList k in l)
    {
        foreach (DynamicTableEntity dte in k)
        {
            if (tablebatchoperation == null)
               tablebatchoperation = new TableBatchOperation();
            tablebatchoperation.Insert(dte);
            if (tablebatchoperation.Count == 100)
            {
               table.ExecuteBatch(tablebatchoperation);
               tablebatchoperation = new TableBatchOperation();
            }
        }
    }

    if (tablebatchoperation.Count > 0)
        table.ExecuteBatch(tablebatchoperation);

また、1 回のバッチ操作のすべてのエンティティが同じパーティションの一部である必要があることに注意してください。パーティションと行キーをどこに設定していますか?

于 2013-01-02T07:40:27.693 に答える
0

次の質問を見てみると、必要なものが見つかるかもしれません。また、挿入で優れたパフォーマンスを達成することも重要です: Azure Table Storage で 1 秒あたり 10 回以上の挿入を達成する方法

于 2013-01-01T23:11:59.420 に答える