{"id":5325,"date":"2014-07-07T16:12:36","date_gmt":"2014-07-07T14:12:36","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=5325"},"modified":"2014-12-02T10:32:35","modified_gmt":"2014-12-02T08:32:35","slug":"migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/","title":{"rendered":"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB"},"content":{"rendered":"<p>We are working on upgrading some of our servers from <a href=\"http:\/\/www.openstack.org\/software\/havana\/\">Havana<\/a> to <a href=\"http:\/\/www.openstack.org\/software\/icehouse\/\">Icehouse<\/a>. One of the reasons for doing this is that the performance of Ceilometer on Havana is underwhelming. Part of the move involves moving to a <a href=\"http:\/\/www.mongodb.org\/\">mongodb<\/a> backend (default in <a href=\"http:\/\/www.mirantis.com\/company\/press-center\/company-news\/mirantis-unveils-mirantis-openstack-5-0-delivers-production-support-icehouse-release-vmware-vcenter-server\/\">Mirantis Openstack 5.0<\/a>) but we also want to keep our energy consumption data from our Havana system. Consequently, we have a data migration issue from Havana\/<a href=\"http:\/\/www.mysql.com\/\">mysql<\/a> to Icehouse\/mongo. Here, we describe how we did this migration. (Note that as this is just a small experimental system, we don\u2019t have important user and account data to transfer).<\/p>\n<p><!--more--><\/p>\n<p>While there is lots of information out there on moving from <a href=\"http:\/\/stackoverflow.com\/questions\/6251548\/converting-database-from-mysql-to-mongodb\">mysql to mongo<\/a> the Havana to Icehouse move also brings specific issues with changes in data structures which had to be taken into account here. The data structures are shown below:<br \/>\n<a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5326 size-full alignnone\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png\" alt=\"mysql-mongo\" width=\"800\" height=\"755\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png 800w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo-300x283.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo-317x300.png 317w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>In havana\/mysql, the energy consumption data is captured in three tables: the resource, the source association and the meter. The sample data appears in the meter table. In icehouse\/mongo, the source association table has been dropped and there are only two tables &#8211; the resources and the meters; again the sample data is stored in the meter table. The resource table has been extended slightly to include more information describing the meter (the unit it uses and the meter type) and the names of some of the fields have been modified a little. The source &#8211; which was previously in a separate sourceassoc &#8211; has now been captured in both the resource and meter tables.<\/p>\n<p>While the differences are not large, migrating the data was not as simple as exporting a csv and importing it into mongo; we wrote a short python script to make the data transformations necessary for this import. We used the <a href=\"http:\/\/structure.usc.edu\/mysqldb\/MySQLdb-3.html\">MySQLdb<\/a>, <a href=\"http:\/\/api.mongodb.org\/python\/current\/\">pymongo<\/a> and <a href=\"https:\/\/docs.python.org\/2\/library\/json.html\">json<\/a> libraries.<\/p>\n<p>First, we had to import relevant libraries and set up the database connection.<\/p>\n<pre><code>\r\n#!\/usr\/bin\/python\r\nimport MySQLdb\r\nimport MySQLdb.cursors\r\nimport pymongo\r\nfrom pymongo import MongoClient\r\nimport json\r\nimport datetime\r\nconnection = MySQLdb.connect (host = \"host.ip.address\", user = \"user\", passwd = \"passw\", db = \"ceilometer\", cursorclass = MySQLdb.cursors.DictCursor)\r\n<\/code><\/pre>\n<p>Then, we have to extract the resource information from the mysql database. We need to extract that subset of the resources that are connected to energy meters via the source association and then we need to change the names of the fields in each of the records &#8211; id needs to be changed to _id, source_id is changed to source, resource_metadata is changed to metadata and change the metadata from string type to dictionary.(Note that in our system, we had three energy meters named \u2018node-41.domain.tld\u2019, \u2018node-42.domain.tld\u2019 and \u2018node-43.domain.tld\u2019). Also, here we add a source field which comes from the sourceassoc directly to the resource record (in the field source).<\/p>\n<pre><code>\r\ncursor = connection.cursor()\r\ncursor.execute (\"select distinct r.id, r.resource_metadata, r.project_id, r.user_id, s.source_id from resource as r inner join sourceassoc as s on s.resource_id = r.id where \u00a0r.id = 'node-41.domain.tld' \u00a0or r.id = 'node-42.domain.tld' or r.id = 'node-43.domain.tld'\")\r\nresource_data = cursor.fetchall()\r\ncursor.close()\r\n\r\nfor resource in resource_data:\r\n    resource['_id'] = resource.pop('id')\r\n    resource['source'] = resource.pop('source_id')\r\n    resource['metadata'] = resource.pop('resource_metadata')\r\n    resource['metadata'] = json.loads(resource['metadata'])\r\n<\/code><\/pre>\n<p>Next, we need to add basic meter information to the resource table. This had to be extracted from the havana\/mysql meter tables and inserted into the icehouse\/mongo resource tables. It involved obtaining the set of distinct counter names, units, types and resource id from havana\/mysql and matching these with resource ids in icehouse\/mongo.<\/p>\n<pre><code>\r\ncursor = connection.cursor()\r\n# assumes that the counter_name, counter_unit and counter_type are the\r\n# same in all samples for a particular meter\r\ncursor.execute (\"select distinct counter_name, counter_unit, counter_type, resource.id from meter, resource where resource.id = meter.resource_id and meter.counter_name = 'energy'\")\r\nmeter_resource_data = cursor.fetchall()\r\ncursor.close()\r\n\r\ntry:\r\n    for meter_resource in meter_resource_data:\r\n        for resource in resource_data:\r\n            if resource['_id'] == meter_resource['id'] :\r\n                del meter_resource['id']\r\n                meter_list = []\r\n                meter_list.append(meter_resource)\r\n                resource['meter'] = meter_list\r\n                break\r\nexcept:\r\n    print 'Error iterating over resource samples'\u00a0\r\n<\/code><\/pre>\n<p>Having made the modifications to the resource table, we can now write it to the mongo database.<\/p>\n<pre><code>\r\nclient = MongoClient()\r\n# the database name is usually ceilometer, so the next line usually looks like\r\n# db = client.ceilometer\r\ndb = client.<em>databasename<\/em>\r\n# the collection name is usually resource, so the next line usually looks like\r\n# collection = db.resource\r\ncollection = db.<i>collectioname<\/i>\r\nfor row in resource_data:\r\n    collection.insert(row)\r\n<\/code><\/pre>\n<p>Only a couple of small modifications are required to the meter table &#8211; we need to remove the id and modify the timestamp as the timestamp in the havana\/mysql model is represented as standard unix time, but the icehouse\/mongo timestamp is represented using an ISO format. The code below does this.<\/p>\n<pre><code>\r\ncursor = connection.cursor()\r\ncursor.execute (\"select m.*, s.source_id from meter as m inner join sourceassoc as s on s.meter_id = m.id and m.counter_name = 'energy';\")\r\nmeters = cursor.fetchall()\r\nconnection.close()\r\ntry:\r\n    for meter in meters:\r\n        meter['resource_metadata'] = json.loads(meter['resource_metadata'])\r\n        meter['source'] = meter.pop('source_id')\r\n        meter['timestamp'] = datetime.datetime.fromtimestamp(meter['timestamp'])\r\n        meter.pop('id')\r\nexcept:\r\n    print 'Error iterating over meter samples'\r\n# and then we put it into the mongo db\r\n# the collection name meter is assumed below - this is default in ceilometer\r\ncollection_meter = db.meter\r\nfor row in meters:\r\n    collection_meter.insert(row)\r\n<\/code><\/pre>\n<p>Note: Initial tests indicate that Icehouse\/mongo is much faster than Havana\/mysql, the difference between the responses was approximately 30 sec (45 sec in mysql and 16 in mongo).<\/p>\n<p>The full code is below in case you\u2019d like to copy and paste.<\/p>\n<pre><code>\r\n#!\/usr\/bin\/python\r\n#-*- coding: utf-8 -*-\r\nimport MySQLdb\r\nimport MySQLdb.cursors\r\nimport pymongo\r\nfrom pymongo import MongoClient\r\nimport json\r\nimport datetime\r\n\r\nconnection = MySQLdb.connect(host = \"host\", user = \"user\", passwd = \"passw\", db = \"ceilometer\", cursorclass = MySQLdb.cursors.DictCursor)\r\ncursor = connection.cursor()\r\ncursor.execute (\"select distinct r.id, r.resource_metadata, r.project_id, r.user_id, s.source_id from resource as r inner join sourceassoc as s on s.resource_id = r.id where \u00a0r.id = 'node-41.domain.tld' \u00a0or r.id = 'node-42.domain.tld' or r.id = 'node-43.domain.tld'\")\r\nresource_data = cursor.fetchall()\r\ncursor.close()\r\n\r\nfor resource in resource_data:\r\n    resource['_id'] = resource.pop('id')\r\n    resource['source'] = resource.pop('source_id')\r\n    resource['metadata'] = resource.pop('resource_metadata')\r\n    resource['metadata'] = json.loads(resource['metadata'])\r\n\r\ncursor = connection.cursor()\r\ncursor.execute (\"select distinct counter_name, counter_unit, counter_type, resource.id from meter, resource where resource.id = meter.resource_id\")\r\nmeter_resource_data = cursor.fetchall()\r\ncursor.close()\r\n\r\ntry:\r\n    for meter_resource in meter_resource_data:\r\n        for resource in resource_data:\r\n            if resource['_id'] == meter_resource['id'] :\r\n                del meter_resource['id']\r\n                meter_list = []\r\n                meter_list.append(meter_resource)\r\n                resource['meter'] = meter_list\r\n                break\r\nexcept:\r\n    print 'Error iterating over resource samples'\r\n\r\ncursor = connection.cursor()\r\ncursor.execute (\"select m.*, s.source_id from meter as m inner join sourceassoc as s on s.meter_id = m.id and m.counter_name = 'energy';\")\r\nmeters = cursor.fetchall()\r\nconnection.close()\r\n\r\ntry:\r\n    for meter in meters:\r\n        meter['resource_metadata'] = json.loads(meter['resource_metadata'])\r\n        meter['source'] = meter.pop('source_id')\r\n        meter['timestamp'] = datetime.datetime.fromtimestamp(meter['timestamp'])\r\n        meter.pop('id')\r\nexcept:\r\n    print 'Error iterating over meter samples'\r\n\r\nclient = MongoClient()\r\ndb = client.ceilometer\r\n\r\ncollection_resource = db.resource\r\nfor row in resource_data:\r\n    collection_resource.insert(row)\r\n\r\ncollection_meter = db.meter\r\nfor row in meters:\r\n    collection_meter.insert(row)<\/code><\/pre>\n<p>Thanks <a href=\"http:\/\/blog.zhaw.ch\/icclab\/sean-murphy\/\">Se\u00e1n<\/a> for all the help.<\/p>\n<p>If you&#8217;re interested in this topic, you may be interested in some of our other blog posts:<\/p>\n<ul>\n<li>\n<a href=\"http:\/\/blog.zhaw.ch\/icclab\/web-application-to-monitor-and-understand-energy\/\">A Web Application to Monitor and Understand Energy Consumption in an Openstack Cloud<\/a>\n<\/li>\n<li>\n<a href=\"http:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\">Collecting energy consumption data using Kwapi in Openstack<\/a>\n<\/li>\n<li>\n<a href=\"http:\/\/blog.zhaw.ch\/icclab\/understanding-the-relationship-between-ceilometer-processor-utilisation-and-system-energy-consumption-for-a-basic-scenario-in-openstack\/\">Understanding the relationship between ceilometer processor utilisation and system energy consumption for a basic scenario in Openstack<\/a>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>We are working on upgrading some of our servers from Havana to Icehouse. One of the reasons for doing this is that the performance of Ceilometer on Havana is underwhelming. Part of the move involves moving to a mongodb backend (default in Mirantis Openstack 5.0) but we also want to keep our energy consumption data [&hellip;]<\/p>\n","protected":false},"author":101,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[],"features":[],"class_list":["post-5325","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"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>Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB - Service Engineering (ICCLab &amp; SPLab)<\/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:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB\" \/>\n<meta property=\"og:description\" content=\"We are working on upgrading some of our servers from Havana to Icehouse. One of the reasons for doing this is that the performance of Ceilometer on Havana is underwhelming. Part of the move involves moving to a mongodb backend (default in Mirantis Openstack 5.0) but we also want to keep our energy consumption data [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-07T14:12:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-12-02T08:32:35+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png\" \/>\n<meta name=\"author\" content=\"Bruno Grazioli\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bruno Grazioli\" \/>\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:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\"},\"author\":{\"name\":\"Bruno Grazioli\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"headline\":\"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB\",\"datePublished\":\"2014-07-07T14:12:36+00:00\",\"dateModified\":\"2014-12-02T08:32:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\"},\"wordCount\":678,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png\",\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\",\"name\":\"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png\",\"datePublished\":\"2014-07-07T14:12:36+00:00\",\"dateModified\":\"2014-12-02T08:32:35+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage\",\"url\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png\",\"contentUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\",\"name\":\"Bruno Grazioli\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"caption\":\"Bruno Grazioli\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/gaea\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB - Service Engineering (ICCLab &amp; SPLab)","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:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/","og_locale":"en_US","og_type":"article","og_title":"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB","og_description":"We are working on upgrading some of our servers from Havana to Icehouse. One of the reasons for doing this is that the performance of Ceilometer on Havana is underwhelming. Part of the move involves moving to a mongodb backend (default in Mirantis Openstack 5.0) but we also want to keep our energy consumption data [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2014-07-07T14:12:36+00:00","article_modified_time":"2014-12-02T08:32:35+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png","type":"","width":"","height":""}],"author":"Bruno Grazioli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bruno Grazioli","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/"},"author":{"name":"Bruno Grazioli","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"headline":"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB","datePublished":"2014-07-07T14:12:36+00:00","dateModified":"2014-12-02T08:32:35+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/"},"wordCount":678,"commentCount":0,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png","articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/","url":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/","name":"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png","datePublished":"2014-07-07T14:12:36+00:00","dateModified":"2014-12-02T08:32:35+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#primaryimage","url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png","contentUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/07\/mysql-mongo.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba","name":"Bruno Grazioli","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","caption":"Bruno Grazioli"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/gaea\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/101"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=5325"}],"version-history":[{"count":24,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5325\/revisions"}],"predecessor-version":[{"id":6915,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5325\/revisions\/6915"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=5325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=5325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=5325"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=5325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}