{"id":14864,"date":"2020-10-12T18:23:30","date_gmt":"2020-10-12T16:23:30","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/"},"modified":"2023-07-17T08:16:59","modified_gmt":"2023-07-17T06:16:59","slug":"ycsb-nosql-benchmark-on-oracle-database","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/","title":{"rendered":"YCSB (NoSQL benchmark) on Oracle Database"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nThe NoSQL technologies emerged for Big Data workloads where eventual consistency is acceptable and scaling out to multiple server nodes is an easy answer to increase throughput. With cloud services rising, those key-value document datastores started to be used by the web-scale companies for some transactional processing workloads as well. The solutions can provide high performance and easy partitioning capabilities thanks to the very simple API of NoSQL. Each table or collection, has only one key, the primary key, which is used for hash partitioning, sharding, and indexing. The API is a simple get\/put by primary key, or scan on a range. There&#8217;s no referential integrity and no join, so that each query access only one shard, which makes each call it fast and predictable. There&#8217;s limited consistency provided so that each call do not have to wait for cross-node latency. There&#8217;s no row set operations link in SQL: you scale by adding more threads rather than having more work done by each thread.<\/p>\n<p>Even if the API is very simple, there no standard API, and each technology provides a different interface for the application. In order to compare the performance, a benchmark application has been developed by the research division of Yahoo in 2010 (all explained in this paper: <a href=\"https:\/\/www2.cs.duke.edu\/courses\/fall13\/cps296.4\/838-CloudPapers\/ycsb.pdf\">https:\/\/www2.cs.duke.edu\/courses\/fall13\/cps296.4\/838-CloudPapers\/ycsb.pdf<\/a>).This open source YCSB (Yahoo Cloud Serving Benchmark), in addition to providing a core workload generator, includes extensible clients for any NoSQL database. Look at the current clients:<\/p>\n<pre><code>\n[opc@al YCSB]$ grep -r \"ycsb.DB\" . | awk -F\/ '{print $2}' | sort -u | paste -sd,\naccumulo1.9,aerospike,arangodb,asynchbase,azurecosmos,azuretablestorage,cassandra,cloudspanner,couchbase,couchbase2,crail,elasticsearch,elasticsearch5,geode,googlebigtable,googledatastore,griddb,hbase1,hbase2,hypertable,ignite,infinispan,jdbc,kudu,maprjsondb,memcached,mongodb,nosqldb,orientdb,rados,redis,rest,s3,solr,solr6,solr7,voldemort,voltdb\n<\/code><\/pre>\n<p>In the list of clients, you can see that it goes beyond the usual NoSQL datastores. There&#8217;s a JDBC client storing the attibutes in a relational table. I have added the support for the FETCH FIRST n ROWS ONLY so that you can run it on Oracle Database and any SQL:2008 compatible RDBMS.<\/p>\n<p>Here is how to download the latest relase of YCSB:<\/p>\n<pre><code>\ncd \/var\/tmp\nrelease=\"$(curl https:\/\/github.com\/brianfrankcooper\/YCSB | awk '\/[\/]download[\/]\/{print $NF}' )\"\ncurl --location \"$release\" | tar -zxvf -\n<\/code><\/pre>\n<p>However, my Pull Request to support the <a href=\"https:\/\/github.com\/brianfrankcooper\/YCSB\/pull\/1373\" target=\"_blank\" rel=\"noopener noreferrer\">FETCH FIRST n ROWS ONLY<\/a> has been merged but is not yet included in the release, so better compile from source if you want to use YCSB on Oracle Database.<\/p>\n<pre><code>\nsudo yum-config-manager --add-repo http:\/\/repos.fedorapeople.org\/repos\/dchen\/apache-maven\/epel-apache-maven.repo\nsudo yum-config-manager --enable epel-apache-maven\nsudo yum install -y git apache-maven\n<\/code><\/pre>\n<p>This installs Git and Maven if you don&#8217;t have it already (I&#8217;m running an Autonomous Linux on the Oracle Free Tier as it gives me an always free environment with an Oracle Database). Of course you can run it anywhere but remember that, by the nature of the NoSQL API, the network latency between the application and the database is quickly a bottleneck.<\/p>\n<p>I compile YCSB:<\/p>\n<pre><code>\n(\ngit clone https:\/\/github.com\/brianfrankcooper\/YCSB.git\ncd YCSB\nmvn clean package\nmvn -pl site.ycsb:jdbc-binding -am package -DskipTests dependency:build-classpath -DincludeScope=compile -Dmdep.outputFilterFile=true\n) &gt; mvn.log\n<\/code><\/pre>\n<p>I keep the log in &#8220;mvn.log&#8221; and I&#8217;ll use it to get the classpath<\/p>\n<p>YCSB will connect with JDBC but I&#8217;m using the OCI client here (OCI is the Oracle Call Interface). I&#8217;ll also use sqlplus to create the tables. Here is how to download them:<\/p>\n<pre><code>\ncd \/var\/tmp\nwget https:\/\/download.oracle.com\/otn_software\/linux\/instantclient\/oracle-instantclient-basic-linuxx64.rpm\nwget https:\/\/download.oracle.com\/otn_software\/linux\/instantclient\/oracle-instantclient-sqlplus-linuxx64.rpm\nsudo yum localinstall -y oracle-instantclient-basic-linuxx64.rpm oracle-instantclient-sqlplus-linuxx64.rpm\n<\/code><\/pre>\n<p>In this example, I&#8217;ll connect to my free Oracle Autonomous Database for which I&#8217;ve downloaded the wallet into my TNS_ADMIN directory.<\/p>\n<p><span style=\"text-decoration: line-through;\">Here is my quick and dirty way to set the ORACLE_HOME from an installed Instant Client with sqlplus:<\/span><br \/>\n<b>Updated (see comments)<\/b> I&#8217;get important directories for future use:<\/p>\n<pre><code>\nMY_ORACLE_HOME=$(sqlplus \/nolog &lt;&lt;&lt;'get ?\"' | awk -F'\"' '\/SP2-0160\/{print $(NF-2)}')\nMY_TNS_ADMIN=$MY_ORACLE_HOME\/network\/admin\nMY_LD_LIBRARY_PATH=$MY_ORACLE_HOME\nMY_CLASSPATH=\"$MY_ORACLE_HOME\/ojdbc8.jar\"\n<\/code><\/pre>\n<p>You may choose to use the JDBC thin driver, and even run this from the Cloud Shell. For the OCI thick JDBC I need to define the CLASSPATH for the .jar and LD_LIBRARY_PATH for the .so<\/p>\n<p>If you are too lazy to create a database, I let you use the one I&#8217;ve shared for the <a href=\"http:\/\/sql101.pachot.net\/\" target=\"_blank\" rel=\"noopener noreferrer\">SQL101<\/a> presentation. Here is my wallet.<\/p>\n<pre><code>\nwget https:\/\/objectstorage.us-ashburn-1.oraclecloud.com\/n\/idhoprxq7wun\/b\/pub\/o\/Wallet_sql101.zip\nsudo unzip -od $MY_TNS_ADMIN Wallet_sql101.zip\n<\/code><\/pre>\n<p>Please be smart if you use my database, you are not alone there. It is easy to open an <a href=\"https:\/\/www.oracle.com\/cloud\/free\/\" target=\"_blank\" rel=\"noopener noreferrer\">Oracle Cloud trial<\/a> that will leave you with a free Oracle Database for life.<\/p>\n<p>Here is my configuration file providing the connection settings. If you used my SQL101 wallet this will connect to my database with the DEMO user. I&#8217;ll remove it only if someone does nasty things. It is limited to very small storage quota so this is only to check how it works &#8211; not real scale benchmark.<\/p>\n<pre><code>\ncat &gt; \/tmp\/ycsb.database.properties &lt;&lt;CAT\ndb.driver=oracle.jdbc.driver.OracleDriver\ndb.url=jdbc:oracle:oci:@sql101_tp\ndb.user=SQL101DEMO\ndb.passwd=**P455w0rd**\njdbc.batchupdateapi=true\ndb.batchsize=1000\nCAT\n<\/code><\/pre>\n<p>I&#8217;m using the OCI driver here, as I have the Instant Client installed. Of course you can use the thin driver, and even add it as a maven dependency. If you do this, please document it in comments.<\/p>\n<p>YCSB workload is defined by a few properties:<\/p>\n<pre><code>\ncat &gt; \/tmp\/ycsb.workload.properties &lt;&lt;'CAT'\nthreadcount=20\nfieldcount=1\nfieldlength=42\nrecordcount=100000\noperationcount=10000\nworkload=site.ycsb.workloads.CoreWorkload\nreadallfields=true\nreadproportion=0.3\nupdateproportion=0.2\nscanproportion=0.1\ninsertproportion=0.4\nrequestdistribution=zipfian\nminscanlength=1\nmaxscanlength=1000\nCAT\n<\/code><\/pre>\n<p>All this is documented in <a href=\"https:\/\/github.com\/brianfrankcooper\/YCSB\/wiki\/Core-Properties\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/brianfrankcooper\/YCSB\/wiki\/Core-Properties<\/a><\/p>\n<p>Here is my sqlplus script to create the table used by YCSB<\/p>\n<pre><code>\ncat &gt; \/tmp\/ycsb.create.sql &lt;&lt;'SQL'\nset pagesize 1000 long 1000000 echo on\nwhenever sqlerror exit failure\nexec for i in (select * from user_tables where table_name='USERTABLE') loop execute immediate 'drop table USERTABLE'; end loop;\npurge recyclebin;\ncreate table USERTABLE (\n  YCSB_KEY varchar2(25) primary key,\n  FIELD0 &amp;&amp;1\n)\n&amp;&amp;2\n\/\nselect dbms_metadata.get_ddl('TABLE','USERTABLE') from dual;\nexit\nSQL\n<\/code><\/pre>\n<p>It takes the datatype as first parameter, and table attributes as second parameters. I use this to compare various physical data model alternatives. For a scalable key-value document store you will probably partition by hash on the key, with the primary key index being local, maybe even all stored as an Index Organized Table. Any RDBMS has specific features to scale a key-value workload. NoSQL databases usually restrict their implementation to those physical representations, but they didn&#8217;t invent new algorithms for access by primary key as it was there in RDBMS for a long time. But, as some RDBMS like Oracle Database are also optimized to handle complex queries, the default table attributes may not be the best suited for NoSQL-like access.<\/p>\n<p>When running on my SQL101 you are limited in space, so let&#8217;s keep it simple:<\/p>\n<pre><code>\nsqlplus SQL101DEMO\/\"**P455w0rd**\"@sql101_tp @ \/tmp\/ycsb.create.sql \"varchar2(42)\" \"organization index nologging --partition by hash(YCSB_KEY) partitions 8\"\n<\/code><\/pre>\n<p>Now I have a USERTABLE in the DEMO schema.<\/p>\n<p>I put all environment variables in setenv.sh which is called by ycsb.sh<\/p>\n<pre><code>\ncat &gt; \/var\/tmp\/YCSB\/bin\/setenv.sh &lt;&lt;CAT\nTNS_ADMIN=$MY_TNS_ADMIN\nCLASSPATH=$MY_CLASSPATH:$(awk -F= '\/^classpath=\/{cp=$2}END{print cp}' \/var\/tmp\/mvn.log)\nexport LD_LIBRARY_PATH=$MY_LD_LIBRARY_PATH\nCAT\n<\/code><\/pre>\n<p>The LD_LIBRARY_PATH is required to find libocijdbc19 as I&#8217;m using the OCI driver. You can also put it in etc\/ld.so.conf.d\/oic.conf if you prefer. The CLASSPATH includes the one from maven output, plus the ojdbc8.jar<\/p>\n<p>I am now ready to load some data:<\/p>\n<pre><code>\n\/var\/tmp\/YCSB\/bin\/ycsb.sh load jdbc -P \/tmp\/ycsb.workload.properties -P \/tmp\/ycsb.database.properties\n<\/code><\/pre>\n<p>This reads \/tmp\/ycsb.workload.properties for the number of records to create.<\/p>\n<p>Here is how to run the workload defined in \/tmp\/ycsb.workload.properties<\/p>\n<pre><code>\n\/var\/tmp\/YCSB\/bin\/ycsb.sh run jdbc -P \/tmp\/ycsb.workload.properties -P \/tmp\/ycsb.database.properties | tee run.log\n<\/code><\/pre>\n<p>I&#8217;m showing below the Performance Hub when I&#8217;ve run it on my SQL101 database with 20 client threads.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-44121\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-215227-scaled.jpg\" alt=\"\" width=\"1024\" height=\"639\" \/><br \/>\nI&#8217;m running a very low workload here as it is a small test database. But the important message is that you cannot run a benchmark without looking at the database metrics to be sure that the workload, and the bottleneck, is what you expect to push to the limits.<\/p>\n<p>Here is how to quickly parse the log to see the result:<\/p>\n<pre><code>awk -F, '\/^\\[(READ|SCAN|INSERT|UPDATE|DELETE)\\].*95thPercentile\/{printf \"%10.3f %-10s \",$3\/1e6,$1}' run.log | sort | paste -s\n\n     0.355 [SCAN]          0.000 [INSERT]        0.009 [UPDATE]        0.003 [READ]\n\n<\/code><\/pre>\n<p>Measuring the percentiles, 95th Percentile here, is interresting for NoSQL-like workloads. The goal is to scale to million of users and get acceptable response time for most of the interactions. And NoSQL databases are usually used to &#8220;web-scale&#8221; into nodes distributed over the internet where some latency outliers may happen. Looking at percentiles helps to focus on the SLA while accepting those outliers.<\/p>\n<p>This &#8220;jdbc&#8221; client declares all attributes as columns in the table. Of course, even if RDBMS works on structured data in order to ease the application code that can then rely on a schema, SQL includes DDL with all agility to add columns later. But in addition to the traditional relational tables, all the major RDBMS can also be used to store documents. And some have even an optimized datatype to store a JSON document in binary format (JSONB in PostgreSQL, OSON in Oracle). Oracle even provides a NoSQL-like API for it: SODA. I hope that Oracle will contribute to the YCSB project adding a client for SODA.<\/p>\n<p>The NoSQL APIs are similar but may have some implementation differences and, for sure, different calls. YCSB implements read, scan, update, insert, delete and here is how it maps to some popular NoSQL databases:<\/p>\n<ul>\n<li>YCSB read is equivalent to<br \/>\nMongoDB: find().first() with &#8220;_id&#8221;, DynamoDB: getItem(), Cassandra: SELECT without WHERE, HBase: get(), SODA: getOne()<\/li>\n<li>YCSB scan is equivalent to<br \/>\nMongoDB: find().sort().limit(), DynamoDB: scan(), Cassandra: SELECT with WHERE and LIMIT, HBase: scan(), SODA: find()<\/li>\n<li>YCSB update is equivalent to<br \/>\nMongoDB: updateOne(), DynamoDB: updateItem(), Cassandra: UPDATE, HBase: put(), SODA: replaceOne()<\/li>\n<li>YCSB insert is equivalent to<br \/>\nMongoDB: insertOne(), DynamoDB: putItem(), Cassandra: INSERT, HBase: put(), SODA: insert()<\/li>\n<li>YCSB delete is equivalent to<br \/>\nMongoDB: deleteOne(), DynamoDB: deleteItem(), Cassandra: DELETE, HBase: delete(), SODA: remove()<\/li>\n<\/ul>\n<p>With the evolution of RDBMS to converged databases, it is useful to compare the performance of key-value workloads with JDBC SQL API and NoSQL put\/get APIs. YCSB can be used and extended for that. Among the most advanced converged databases:<\/p>\n<ul>\n<li>On PostgreSQL you can use the JDBC client or the &#8220;<a href=\"https:\/\/github.com\/brianfrankcooper\/YCSB\/blob\/master\/postgrenosql\/README.md\" target=\"_blank\" rel=\"noopener noreferrer\">postgrenosql<\/a>&#8221; that are already there in the master branch<\/li>\n<li>On YugaByteDB you can do the same because it is compatible with PostgreSQL with the YSQL API. YB also provides a Cassandra-like NoSQL API: CQL and here is how to run YCSB on it: <a href=\"https:\/\/docs.yugabyte.com\/latest\/benchmark\/ycsb-ycql\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.yugabyte.com\/latest\/benchmark\/ycsb-ycql\/<\/a><\/li>\n<li>On Oracle Database, now that I have added the support for FETCH FIRST, the jdbc client can be used on a relational table. I hope to see a SODA one soon, as SODA (Simple Oracle Document Access) is a very advanced NoSQL API that combines key-value document store with RDBMS consistency and reliability. Oracle has published the <a href=\"https:\/\/blogs.oracle.com\/jsondb\/autonomous-json-database\" target=\"_blank\" rel=\"noopener noreferrer\">result<\/a> but not the code.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . The NoSQL technologies emerged for Big Data workloads where eventual consistency is acceptable and scaling out to multiple server nodes is an easy answer to increase throughput. With cloud services rising, those key-value document datastores started to be used by the web-scale companies for some transactional processing workloads as well. The [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":14866,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[955,229,1739],"tags":[2132,1319,947,2133],"type_dbi":[],"class_list":["post-14864","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud","category-database-administration-monitoring","category-nosql","tag-benchmark","tag-jdbc","tag-nosql","tag-ycsb"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>YCSB (NoSQL benchmark) on Oracle Database - dbi Blog<\/title>\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.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"YCSB (NoSQL benchmark) on Oracle Database\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . The NoSQL technologies emerged for Big Data workloads where eventual consistency is acceptable and scaling out to multiple server nodes is an easy answer to increase throughput. With cloud services rising, those key-value document datastores started to be used by the web-scale companies for some transactional processing workloads as well. The [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-12T16:23:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-17T06:16:59+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2048\" \/>\n\t<meta property=\"og:image:height\" content=\"1064\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"YCSB (NoSQL benchmark) on Oracle Database\",\"datePublished\":\"2020-10-12T16:23:30+00:00\",\"dateModified\":\"2023-07-17T06:16:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/\"},\"wordCount\":1533,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg\",\"keywords\":[\"Benchmark\",\"jdbc\",\"NoSQL\",\"YCSB\"],\"articleSection\":[\"Cloud\",\"Database Administration &amp; Monitoring\",\"NoSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/\",\"name\":\"YCSB (NoSQL benchmark) on Oracle Database - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg\",\"datePublished\":\"2020-10-12T16:23:30+00:00\",\"dateModified\":\"2023-07-17T06:16:59+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg\",\"width\":2048,\"height\":1064},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"YCSB (NoSQL benchmark) on Oracle Database\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"YCSB (NoSQL benchmark) on Oracle Database - dbi Blog","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.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/","og_locale":"en_US","og_type":"article","og_title":"YCSB (NoSQL benchmark) on Oracle Database","og_description":"By Franck Pachot . The NoSQL technologies emerged for Big Data workloads where eventual consistency is acceptable and scaling out to multiple server nodes is an easy answer to increase throughput. With cloud services rising, those key-value document datastores started to be used by the web-scale companies for some transactional processing workloads as well. The [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/","og_site_name":"dbi Blog","article_published_time":"2020-10-12T16:23:30+00:00","article_modified_time":"2023-07-17T06:16:59+00:00","og_image":[{"width":2048,"height":1064,"url":"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg","type":"image\/jpeg"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"YCSB (NoSQL benchmark) on Oracle Database","datePublished":"2020-10-12T16:23:30+00:00","dateModified":"2023-07-17T06:16:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/"},"wordCount":1533,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg","keywords":["Benchmark","jdbc","NoSQL","YCSB"],"articleSection":["Cloud","Database Administration &amp; Monitoring","NoSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/","url":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/","name":"YCSB (NoSQL benchmark) on Oracle Database - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg","datePublished":"2020-10-12T16:23:30+00:00","dateModified":"2023-07-17T06:16:59+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2020-10-11-195758-scaled-1.jpg","width":2048,"height":1064},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/ycsb-nosql-benchmark-on-oracle-database\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"YCSB (NoSQL benchmark) on Oracle Database"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14864","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=14864"}],"version-history":[{"count":1,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14864\/revisions"}],"predecessor-version":[{"id":26707,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14864\/revisions\/26707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/14866"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=14864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=14864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=14864"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=14864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}