Beispiel #1
0
        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();
        }
Beispiel #2
0
        /// <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);
        }