{"id":7150,"date":"2019-07-03T11:03:04","date_gmt":"2019-07-03T18:03:04","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7150"},"modified":"2025-06-13T20:56:53","modified_gmt":"2025-06-14T03:56:53","slug":"user-profile-couchbase-tutorials","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/","title":{"rendered":"User Profile with Couchbase: New Tutorials"},"content":{"rendered":"<div class=\"paragraph\">\n<p>User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user&#8217;s data. With the increasing popularity of microservices, software architects have started to create a single service to consolidate this task.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>We&#8217;ve recently created two tutorials to help you get started building your own system:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.couchbase.com\/tutorials\/profile-store\/java.html\">Using Couchbase Server to Build a User Profile Store (Java)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.couchbase.com\/tutorials\/profile-store\/dotnet.html\">Using Couchbase Server to Build a User Profile Store (.NET)<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><em>This content is part of the new searchable <a href=\"https:\/\/docs.couchbase.com\/tutorials\">&#8220;tutorials&#8221; section<\/a>. It&#8217;s open source, and the content is starting to grow!<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_user_profile\">User Profile<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>A User Profile consists of user-related data. Common data stored includes the user&#8217;s name, login, password, addresses, preferences, security roles, security groups, etc.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Why is Couchbase a good fit for this use case? The user is quite often the most frequently accessed data, and it will potentially impact the performance of the whole system. Some of the key non-functional requirements of a successful system that Couchbase can provide:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><strong>Strong Consistency<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>High read and write throughput<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>Caching<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>A flexible data model<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>Easy and fast querying<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>Natural-Language matching<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>High Scalability<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>High Availability<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_user_profile_step_by_step\">User Profile Step-by-step<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>In these tutorials, you&#8217;ll create a basic User Profile service step-by-step. These steps include:<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p>Setting up a new project (Spring or ASP.NET)<\/p>\n<\/li>\n<li>\n<p>Representing a profile as a class<\/p>\n<\/li>\n<li>\n<p>Creating a repository to access profiles<\/p>\n<\/li>\n<li>\n<p>Querying the data with appropriate indexes<\/p>\n<\/li>\n<li>\n<p>Search users with Full Text Search<\/p>\n<\/li>\n<li>\n<p>Storing user events asynchronously (RxJava or async\/await)<\/p>\n<\/li>\n<li>\n<p>Configuring replication between data centers<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>If you&#8217;re just starting a user profile service, you can start at step 1. If you are looking to enhance an existing system, you can start at a later step.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_java_and_net_tutorials\">Java and .NET Tutorials<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>That sounds like a lot of ground to cover, but these tutorials start with a simple profile and expand from there. These tutorials cover .NET and Java from idiomatic points of view, showing the strengths of the language\/tooling that you&#8217;re already familiar with.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>With Java, you&#8217;ll be using the Spring framework, so the beginnings of a repository are as simple as creating two classes:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-Java\" data-lang=\"Java\">@Data\r\n@Document\r\npublic class UserEntity {\r\n    @Id\r\n    private String id;\r\n    @NotNull\r\n    @Size(max = 2, min=2)\r\n    private String countryCode;\r\n    @NotNull\r\n    private String username;\r\n    @NotNull\r\n    private String password;\r\n}\r\n\r\n@N1qlPrimaryIndexed\r\n@N1qlSecondaryIndexed(indexName = \"userEntity\")\r\npublic interface UserEntityRepository extends CouchbasePagingAndSortingRepository&lt;UserEntity, String&gt; {\r\n\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>In C# and .NET, async\/await are first-class keywords that make easy work of asynchronous programming necessary for storing a batch of events in a profile:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\" data-lang=\"C#\">public async Task AddEventsAsync(List&lt;UserEvent&gt; events)\r\n{\r\n    var tasks = events.Select(e =&gt; _bucket.InsertAsync(e.Id, new\r\n    {\r\n        e.CreatedDate,\r\n        e.EventType,\r\n        e.UserId,\r\n        e.Type\r\n    }));\r\n    await Task.WhenAll(tasks);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Next Steps<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>For more details, head over to the complete tutorial of your choice.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>If you are a .NET developer, you can follow along with the <a href=\"https:\/\/docs.couchbase.com\/tutorials\/profile-store\/dotnet.html\">.NET User Profile Tutorial<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>If you are a Java developer, you can follow along with the <a href=\"https:\/\/docs.couchbase.com\/tutorials\/profile-store\/java.html\">Java User Profile Tutorial<\/a><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>If you have any questions or feedback for this tutorial, you can find me on <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a> for .NET questions or Denis Rosa on <a href=\"https:\/\/twitter.com\/deniswsrosa\">Twitter @deniswsrosa<\/a> for Java questions. As with everything in Couchbase documentation, this tutorial is open source and <a href=\"https:\/\/www.couchbase.com\/blog\/documentation-contribution-improvements\/\">pull requests for improvements<\/a> are welcome!<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user&#8217;s data. With the increasing popularity of microservices, software architects have started to create a single service to consolidate this task. [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":7151,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,1815,10127,1816],"tags":[1424,1500,2215],"ppma_author":[8937],"class_list":["post-7150","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-best-practices-and-tutorials","category-c-sharp","category-couchbase-server","tag-spring","tag-tutorial","tag-user-profile"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>User Profile with Couchbase: New Tutorials - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user&#039;s data.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"User Profile with Couchbase: New Tutorials\" \/>\n<meta property=\"og:description\" content=\"User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user&#039;s data.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-03T18:03:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:56:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"881\" \/>\n\t<meta property=\"og:image:height\" content=\"329\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"User Profile with Couchbase: New Tutorials\",\"datePublished\":\"2019-07-03T18:03:04+00:00\",\"dateModified\":\"2025-06-14T03:56:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/\"},\"wordCount\":480,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg\",\"keywords\":[\"spring\",\"tutorial\",\"user profile\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"Best Practices and Tutorials\",\"C#\",\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/\",\"name\":\"User Profile with Couchbase: New Tutorials - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg\",\"datePublished\":\"2019-07-03T18:03:04+00:00\",\"dateModified\":\"2025-06-14T03:56:53+00:00\",\"description\":\"User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user's data.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg\",\"width\":881,\"height\":329,\"caption\":\"Human Silhouettes licensed through Creative Commons https:\/\/www.maxpixel.net\/Human-Silhouettes-Crowd-Group-Of-People-Personal-2718833\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"User Profile with Couchbase: New Tutorials\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"User Profile with Couchbase: New Tutorials - The Couchbase Blog","description":"User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user's data.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/","og_locale":"en_US","og_type":"article","og_title":"User Profile with Couchbase: New Tutorials","og_description":"User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user's data.","og_url":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-07-03T18:03:04+00:00","article_modified_time":"2025-06-14T03:56:53+00:00","og_image":[{"width":881,"height":329,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"User Profile with Couchbase: New Tutorials","datePublished":"2019-07-03T18:03:04+00:00","dateModified":"2025-06-14T03:56:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/"},"wordCount":480,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg","keywords":["spring","tutorial","user profile"],"articleSection":[".NET","ASP.NET","Best Practices and Tutorials","C#","Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/","url":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/","name":"User Profile with Couchbase: New Tutorials - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg","datePublished":"2019-07-03T18:03:04+00:00","dateModified":"2025-06-14T03:56:53+00:00","description":"User Profile is a common paradigm in software architecture. It is meant to centralize the code responsible for managing user's data.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/124-hero-user-profile.jpg","width":881,"height":329,"caption":"Human Silhouettes licensed through Creative Commons https:\/\/www.maxpixel.net\/Human-Silhouettes-Crowd-Group-Of-People-Personal-2718833"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/user-profile-couchbase-tutorials\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"User Profile with Couchbase: New Tutorials"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves is a guy who loves to code.  It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything.  He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s.  He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community.  He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=7150"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7150\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/7151"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=7150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=7150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=7150"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=7150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}