public async Task <StoredLatency> Delete(StreamEntityBase item, IStreamPersisterBatch batch = null) { await _client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(_database, _collection, item.Id)); return(new StoredLatency() { NumItems = 1, Time = StreamEntityPersisterPartition.GetStoredLatency(item) }); }
public async Task <StoredLatency> Commit() { Batch.Execute(); await Task.WhenAll(Tasks); return(new StoredLatency() { NumItems = Items.Count, Time = StreamEntityPersisterPartition.GetStoredLatency(Items) }); }
public async Task <StoredLatency> Commit() { var partitionKey = _items.First()[nameof(StreamEntityBase.PartitionKey)]; var response = await _client.ExecuteStoredProcedureAsync <string>(_sprocLink, new RequestOptions { PartitionKey = new Microsoft.Azure.Documents.PartitionKey(partitionKey) }, new { docs = _items }); return(new StoredLatency() { NumItems = _items.Count, Time = StreamEntityPersisterPartition.GetStoredLatency(_items) }); }
public async Task <StoredLatency> Upsert(StreamEntityBase item, IStreamPersisterBatch batch = null) { StoredLatency storedLatency; var sw = new Stopwatch(); sw.Start(); var collectionUri = UriFactory.CreateDocumentCollectionUri(_database, _collection); var itemDictionary = item.ToKeyValueDictionary(); if (batch != null) { var cosmosDbBatch = batch as CosmosDBStreamPersisterBatch; cosmosDbBatch.AddItem(itemDictionary); storedLatency = new StoredLatency() { NumItems = 0, Time = 0.0 }; } else { await _client.UpsertDocumentAsync(collectionUri, itemDictionary, new RequestOptions { PartitionKey = new PartitionKey(item.PartitionKey) }); storedLatency = new StoredLatency() { NumItems = 1, Time = StreamEntityPersisterPartition.GetStoredLatency(item) }; } sw.Stop(); lock (this) { _numUpserts++; _timeSpentUpsert += sw.ElapsedMilliseconds; var now = DateTime.UtcNow; if (now > (_lastReported + TimeSpan.FromSeconds(10))) { if (_numUpserts > 0) { Console.WriteLine($"CosmosDB Persister; Num upserts {_numUpserts / 10} / sec, Avg time per call {_timeSpentUpsert / _numUpserts} ms."); } _numUpserts = 0; _timeSpentUpsert = 0; _lastReported = now; } } return(storedLatency); }
public async Task <StoredLatency> Delete(StreamEntityBase item, IStreamPersisterBatch batch = null) { double storedLatency = 0.0; if (batch != null) { RedisStreamPersisterBatch stx = batch as RedisStreamPersisterBatch; stx.AddItem(item, stx.Batch.HashDeleteAsync($"{_databaseName}-{item.EntityType}", item.Id)); storedLatency = 0.0; } else { await _db.HashDeleteAsync($"{_databaseName}-{item.EntityType}", item.Id); storedLatency = StreamEntityPersisterPartition.GetStoredLatency(item); } return(new StoredLatency { NumItems = (batch == null ? 1 : 0), Time = storedLatency }); }
public async Task <StoredLatency> Upsert(StreamEntityBase item, IStreamPersisterBatch batch = null) { double storedLatency = 0.0; var data = item.ToProtoBufByteArray(); if (batch != null) { RedisStreamPersisterBatch stx = batch as RedisStreamPersisterBatch; stx.AddItem(item, stx.Batch.HashSetAsync($"{_databaseName}-{item.EntityType}", item.Id, data)); storedLatency = 0.0; } else { await _db.HashSetAsync($"{_databaseName}-{item.EntityType}", item.Id, data); storedLatency = StreamEntityPersisterPartition.GetStoredLatency(item); } Interlocked.Increment(ref _numUpserts); return(new StoredLatency { NumItems = (batch == null ? 1 : 0), Time = storedLatency }); }