Ejemplo n.º 1
0
        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)
            });
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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
            });
        }
Ejemplo n.º 6
0
        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
            });
        }