public void Windowing() { var builder = new StreamBuilder(); builder.Stream <string, string>("topic") .GroupByKey() .WindowedBy(TumblingWindowOptions.Of(1000)) .Count(RocksDbWindows <string, long> .As <StringSerDes, Int64SerDes>("rocksdb-w-store")); var config = new StreamConfig <StringSerDes, StringSerDes>(); config.ApplicationId = "test-rocksdb-window-store"; config.UseRandomRocksDbConfigForTest(); Topology t = builder.Build(); using (var driver = new TopologyTestDriver(t, config)) { DateTime dt = DateTime.Now; var inputTopic = driver.CreateInputTopic <string, string>("topic"); inputTopic.PipeInput("key1", "1", dt); inputTopic.PipeInput("key2", "2", dt); var store = driver.GetWindowStore <string, long>("rocksdb-w-store"); Assert.IsNotNull(store); var k1 = store.FetchAll(dt.AddMinutes(-10), dt.AddMinutes(10)).ToList(); Assert.AreEqual(2, k1.Count); Assert.AreEqual(1L, k1[0].Value); Assert.AreEqual(1L, k1[1].Value); } config.RemoveRocksDbFolderForTest(); }
/// <summary> /// Materialize a <see cref="RocksDbWindowStore"/> with the given name. /// </summary> /// <typeparam name="KS">New serializer for <typeparamref name="K"/> type</typeparam> /// <typeparam name="VS">New serializer for <typeparamref name="V"/> type</typeparam> /// <param name="storeName">the name of the underlying <see cref="IKTable{K, V}"/> state store; valid characters are ASCII alphanumerics, '.', '_' and '-'.</param> /// <param name="segmentInterval"></param> /// <param name="windowSize">the windows size aggregation</param> /// <returns>a new <see cref="RocksDbWindows{K, V}"/> instance with the given storeName</returns> public static RocksDbWindows <K, V> @As <KS, VS>(string storeName, TimeSpan?segmentInterval = null, TimeSpan?windowSize = null) where KS : ISerDes <K>, new() where VS : ISerDes <V>, new() { var m = new RocksDbWindows <K, V>(storeName, new RocksDbWindowBytesStoreSupplier( storeName, TimeSpan.FromDays(1), segmentInterval.HasValue ? (long)segmentInterval.Value.TotalMilliseconds : 60 * 1000 * 60, windowSize.HasValue ? (long)windowSize.Value.TotalMilliseconds : (long?)null)) { KeySerdes = new KS(), ValueSerdes = new VS() }; return(m); }