Пример #1
0
        public void generate_data()
        {
            //theContainer.Inject<ISerializer>(new TestsSerializer());

            theContainer.GetInstance <DocumentCleaner>().CompletelyRemove(typeof(Target));

            // Get Roslyn spun up before measuring anything
            var schema = theContainer.GetInstance <IDocumentSchema>();

            schema.MappingFor(typeof(Target)).As <DocumentMapping>().DuplicateField("Date");

            schema.StorageFor(typeof(Target)).ShouldNotBeNull();

            theContainer.GetInstance <DocumentCleaner>().DeleteDocumentsFor(typeof(Target));


            var session = theContainer.GetInstance <IDocumentStore>().OpenSession();
            var store   = theContainer.GetInstance <IDocumentStore>();

            var data = Target.GenerateRandomData(10000).ToArray();

            Timings.Time(() => { store.BulkInsert(data); });


            var theDate = DateTime.Today.AddDays(3);

            var one = Timings.Time(() =>
            {
                var sql = "select data from mt_doc_target where (data ->> 'Date')::date = ?";
                session.Query <Target>(sql, theDate).ToArray().Length.ShouldBeGreaterThan(0);
            });


            var two = Timings.Time(() =>
            {
                var sql =
                    "select r.data from mt_doc_target as r, LATERAL jsonb_to_record(r.data) as l(\"Date\" date) where l.\"Date\" = ?";

                session.Query <Target>(sql, theDate).ToArray().Count().ShouldBeGreaterThan(0);
            });

            var three = Timings.Time(() =>
            {
                var sql =
                    "select r.data from mt_doc_target as r where r.date = ?";

                session.Query <Target>(sql, theDate).ToArray().Count().ShouldBeGreaterThan(0);
            });

            Debug.WriteLine($"json locator: {one}, lateral join: {two}, searchable field: {three}");
        }