/// <summary>
        /// Driver function for bulk import.
        /// </summary>
        /// <returns></returns>
        private async Task RunBulkImportAndBulkDeleteAsync()
        {
            // Import documents into the collection
            await this.RunBulkImport();

            // Fetch <PartitionKey><DocumentId> tuples to delete in bulk
            List <Tuple <string, string> > pkIdTuplesToDelete = GeneratePartitionKeyDocumentIdTuplesToBulkDelete();

            long               totalNumberOfDocumentsDeleted = 0;
            double             totalRequestUnitsConsumed     = 0;
            double             totalTimeTakenSec             = 0;
            BulkDeleteResponse bulkDeleteResponse            = null;

            BulkExecutor bulkExecutor = new BulkExecutor(this.client, this.dataCollection);
            await bulkExecutor.InitializeAsync();

            try
            {
                bulkDeleteResponse = await bulkExecutor.BulkDeleteAsync(pkIdTuplesToDelete);

                totalNumberOfDocumentsDeleted = bulkDeleteResponse.NumberOfDocumentsDeleted;
                totalRequestUnitsConsumed     = bulkDeleteResponse.TotalRequestUnitsConsumed;
                totalTimeTakenSec             = bulkDeleteResponse.TotalTimeTaken.TotalSeconds;
            }
            catch (DocumentClientException de)
            {
                Trace.TraceError("Document client exception: {0}", de);
            }
            catch (Exception e)
            {
                Trace.TraceError("Exception: {0}", e);
            }

            Trace.WriteLine("\n\n--------------------------------------------------------------------- ");
            Trace.WriteLine("Executing bulk delete:");
            Trace.WriteLine("--------------------------------------------------------------------- ");
            Trace.WriteLine("\n\nOverall summary of bulk delete:");
            Trace.WriteLine("--------------------------------------------------------------------- ");
            Trace.WriteLine(String.Format("Deleted {0} docs @ {1} writes/s, {2} RU/s in {3} sec",
                                          totalNumberOfDocumentsDeleted,
                                          Math.Round(totalNumberOfDocumentsDeleted / totalTimeTakenSec),
                                          Math.Round(totalRequestUnitsConsumed / totalTimeTakenSec),
                                          totalTimeTakenSec));
            Trace.WriteLine(String.Format("Average RU consumption per document delete: {0}",
                                          (totalRequestUnitsConsumed / totalNumberOfDocumentsDeleted)));
            Trace.WriteLine("--------------------------------------------------------------------- \n");

            //-----------------------------------------------------------------------------------------------
        }
コード例 #2
0
        public async Task DeleteAsync(IEnumerable <string> ids)
        {
            var documentCollection = await _documentClient.ReadDocumentCollectionAsync(GetCollectionUri()).ConfigureAwait(false);

            var bulkExecutor = new BulkExecutor(_documentClient as Documents.Client.DocumentClient, documentCollection);
            await bulkExecutor.InitializeAsync().ConfigureAwait(false);

            var entries = ids.Select(x => new Tuple <string, string>(x, x)).ToList();

            BulkDeleteResponse bulkDeleteResponse = null;

            do
            {
                bulkDeleteResponse = await bulkExecutor
                                     .BulkDeleteAsync(entries)
                                     .ConfigureAwait(false);
            } while (bulkDeleteResponse.NumberOfDocumentsDeleted < entries.Count && bulkDeleteResponse.NumberOfDocumentsDeleted > 0);
        }
コード例 #3
0
        public BulkInsertOpeartionResult BulkDeleteDocuments(string query, int?deleteBatchSize = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            _metaDataOperator.AddActivity(_databaseName, _collectionName, DateTimeOffset.Now, ActivityStrength.Hot).Wait();
            lock (bulkDeleteLock)
            {
                var scaleOperation = ScaleLogic.ScaleUpMaxCollectionAsync(_client, _metaDataOperator, _databaseName, _collectionName, _minRu, _maxRu).GetAwaiter().GetResult();
                var response       = _bulkExecutor.BulkDeleteAsync(query, deleteBatchSize, cancellationToken).GetAwaiter().GetResult();

                return(new BulkInsertOpeartionResult
                {
                    ScaleOperations = new List <ScaleOperation>()
                    {
                        scaleOperation
                    },
                    OperationSuccess = true
                });
            }
        }
コード例 #4
0
 // Excluding from CodeCoverage here because this function persists in showing no matter if the file is being ignored
 public async Task <BulkDeleteResponse> BulkDeleteAsync(List <Tuple <string, string> > pkIdTuplesToDelete, int?deleteBatchSize = null, CancellationToken cancellationToken = default)
 {
     return(await bulkExecutor.BulkDeleteAsync(pkIdTuplesToDelete, deleteBatchSize, cancellationToken));
 }