Example #1
0
        public async Task <IActionResult> BulkInsert(int num)
        {
            using (var db = new AppDb())
            {
                var time = DateTime.Now;
                await db.Connection.OpenAsync();

                var txn = await db.Connection.BeginTransactionAsync();

                try
                {
                    for (var i = 0; i < num; i++)
                    {
                        var blogPost = new BlogPost
                        {
                            Db      = db,
                            Title   = "bulk",
                            Content = "bulk " + num
                        };
                        await blogPost.InsertAsync();
                    }
                }
                catch (Exception)
                {
                    await txn.RollbackAsync();

                    throw;
                }
                await txn.CommitAsync();

                var timing = $"Async: Inserted {num} records in " + (DateTime.Now - time);
                Console.WriteLine(timing);
                return(new OkObjectResult(timing));
            }
        }
        public async Task <IActionResult> Post([FromBody] BlogPost body)
        {
            await Db.Connection.OpenAsync();

            body.Db = Db;
            await body.InsertAsync();

            return(new OkObjectResult(body));
        }
Example #3
0
        public async Task <IActionResult> Post([FromBody] BlogPost body)
        {
            using (var db = new AppDb())
            {
                await db.OpenAsync();

                await BlogPost.InsertAsync(db, body);

                return(new OkObjectResult(body));
            }
        }
Example #4
0
        public async Task <IActionResult> Post([FromBody] BlogPost body)
        {
            // Abrir una conexion
            await Db.Connection.OpenAsync();

            // Body es de tipo blogpost, por lo cual tiene una propiedad Db
            body.Db = Db;
            // Insertar de forma asincrona el post, usando al body.
            await body.InsertAsync();

            // Retornar 201 y el item creado
            return(new OkObjectResult(body));
        }
        public static void Run(int iterations, int concurrency, int ops)
        {
            var recordNum = 0;

            async Task InsertOne(AppDb db)
            {
                var blog = new BlogPost(db)
                {
                    Title   = "Title " + Interlocked.Increment(ref recordNum),
                    Content = "content"
                };
                await blog.InsertAsync();
            }

            var selected = new ConcurrentQueue <string>();

            async Task SelectTen(AppDb db)
            {
                var blogPosts = await(new BlogPostQuery(db)).LatestPostsAsync();

                selected.Enqueue(blogPosts.FirstOrDefault().Title);
            }

            var sleepNum = 0;

            async Task SleepMillisecond(AppDb db)
            {
                using (var cmd = db.Connection.CreateCommand())
                {
                    cmd.CommandText = "SELECT SLEEP(0.001)";
                    await cmd.ExecuteNonQueryAsync();
                }
                Interlocked.Increment(ref sleepNum);
            }

            using (var db = new AppDb())
            {
                db.Connection.Open();
                using (var cmd = db.Connection.CreateCommand())
                {
                    cmd.CommandText = "DELETE FROM `BlogPost`";
                    cmd.ExecuteNonQuery();
                }
            }

            PerfTest(InsertOne, "Insert One", iterations, concurrency, ops).GetAwaiter().GetResult();
            using (var db = new AppDb())
            {
                db.Connection.Open();
                using (var cmd = db.Connection.CreateCommand())
                {
                    cmd.CommandText = "SELECT COUNT(*) FROM `BlogPost`";
                    Console.WriteLine("Records Inserted: " + cmd.ExecuteScalar());
                    Console.WriteLine();
                }
            }

            PerfTest(SelectTen, "Select Ten", iterations, concurrency, ops).GetAwaiter().GetResult();
            Console.WriteLine("Records Selected: " + selected.Count * 10);
            string firstRecord;

            if (selected.TryDequeue(out firstRecord))
            {
                Console.WriteLine("First Record: " + firstRecord);
            }
            Console.WriteLine();

            PerfTest(SleepMillisecond, "Sleep 1ms", iterations, concurrency, ops).GetAwaiter().GetResult();
            Console.WriteLine("Total Sleep Commands: " + sleepNum);
            Console.WriteLine();
        }
Example #6
0
        public static void Run(IAppDb appDb, int iterations, int concurrency, int ops)
        {
            var recordNum = 0;

            async Task InsertOne(IAppDb db)
            {
                var blog = new BlogPost(db)
                {
                    Title   = "Title " + Interlocked.Increment(ref recordNum),
                    Content = "Content " + recordNum
                };
                await blog.InsertAsync();
            }

            var selected = new ConcurrentQueue <BlogPost>();

            async Task SelectTen(IAppDb db)
            {
                var blogPosts = await(new BlogPostQuery(db)).Random10Async(recordNum);

                selected.Enqueue(blogPosts.FirstOrDefault());
            }

            var updatedNum = 0;

            async Task UpdateOne(IAppDb db)
            {
                BlogPost blogPost;

                if (selected.TryDequeue(out blogPost) && blogPost != null)
                {
                    blogPost.Db      = db;
                    blogPost.Content = "Content Updated " + Interlocked.Increment(ref updatedNum);
                    await blogPost.UpdateAsync();
                }
            }

            using (var db = appDb.New())
            {
                db.Connection.Open();
                using (var cmd = db.Connection.CreateCommand())
                {
                    cmd.CommandText = "DELETE FROM BlogPost";
                    cmd.ExecuteNonQuery();
                }
            }

            PerfTest(appDb, InsertOne, "Insert One", iterations, concurrency, ops).GetAwaiter().GetResult();
            using (var db = appDb.New())
            {
                db.Connection.Open();
                using (var cmd = db.Connection.CreateCommand())
                {
                    cmd.CommandText = "SELECT COUNT(*) FROM BlogPost";
                    Console.WriteLine("Records Inserted: " + cmd.ExecuteScalar());
                    Console.WriteLine();
                }
            }

            PerfTest(appDb, SelectTen, "Select Ten", iterations, concurrency, ops).GetAwaiter().GetResult();
            Console.WriteLine("Records Selected: " + selected.Count * 10);
            BlogPost firstRecord;

            if (selected.TryPeek(out firstRecord))
            {
                Console.WriteLine("First Record: " + firstRecord.Content);
            }
            Console.WriteLine();

            PerfTest(appDb, UpdateOne, "Update One", iterations, concurrency, ops).GetAwaiter().GetResult();
            Console.WriteLine("Records Updated: " + updatedNum);
            using (var db = appDb.New())
            {
                db.Connection.Open();
                var firstRecordUpdated = new BlogPostQuery(db).FindOne(firstRecord.Id);
                if (firstRecordUpdated != null)
                {
                    Console.WriteLine("First Record: " + firstRecordUpdated.Content);
                }
            }
        }