{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/deploy-scalable-software/week-3",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnaeus University","language":"en","courseCode":"2DV013"}},"mdx":{"fields":{"id":"381fbc55-f9b6-5573-8aca-29f03eb7ee74","title":"Week 3: Databases and Compose","slug":"/deploy-scalable-software/week-3"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Week 3: Databases and Compose\",\n  \"metaTitle\": \"2DV013 | Deploy scalable software | Week 3: Databases and Compose\",\n  \"metaDescription\": \"Cloudbook stores reports in MongoDB, counts them in Redis, and Compose starts the lot locally.\",\n  \"order\": 4\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", null, \"Week 3: Databases and Compose\"), mdx(\"p\", null, \"The app gets state. Reports go into MongoDB and a counter into Redis, and you learn what changes when the data has to survive a restart. Docker Compose runs the databases on your computer. They are not deployed to the server this week.\"), mdx(\"p\", null, \"A full app on your computer that keeps its data. Do not tag in this week or the next: the server has no databases yet, so a deployed container would crash.\"), mdx(\"h2\", null, \"Issues\"), mdx(\"p\", null, \"Work through the issues in order, in your own repository. Each one builds on the one before.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Issue\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"What you do\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"mongodb\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Take a report through a form and keep it in MongoDB.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"list-reports\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Show every report, newest first.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"redis-counter\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Count the reports in Redis.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"docker-compose\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"One command starts MongoDB and Redis, with volumes so the data survives.\")))), mdx(\"p\", null, \"Write the week report in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"report/week-3.md\"), \" after the last issue.\"), mdx(\"h2\", null, \"Slide decks\"), mdx(\"p\", null, \"Each deck is a self-study lecture of about 15\\u201320 minutes, except the intro, which takes about five.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week3-0-intro/slides.html\"\n  }, \"Week 3 intro\"), \": what the week asks of you\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week3-1-data-stores/slides.html\"\n  }, \"Data stores\"), \": document store and key-value store, stateful against stateless\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"../slides/deploy-scalable-software/week3-2-compose/slides.html\"\n  }, \"Docker Compose\"), \": one file for several containers, service names and environment parity\")), mdx(\"h2\", null, \"Reading material\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docs/MONGODB.md\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docs/REDIS.md\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docs/DOCKER-COMPOSE.md\"), \" in your repo\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.mongodb.com/docs/drivers/node/current/\"\n  }, \"MongoDB Node.js driver\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://redis.io/docs/latest/\"\n  }, \"Redis documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.docker.com/compose/\"\n  }, \"Docker Compose documentation\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#week-3-databases-and-compose","title":"Week 3: Databases and Compose"},{"url":"#issues","title":"Issues"},{"url":"#slide-decks","title":"Slide decks"},{"url":"#reading-material","title":"Reading material"}]},"parent":{"relativePath":"deploy-scalable-software/week-3.md"},"frontmatter":{"metaTitle":"2DV013 | Deploy scalable software | Week 3: Databases and Compose","metaDescription":"Cloudbook stores reports in MongoDB, counts them in Redis, and Compose starts the lot locally.","fullWidth":null}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/deploy-scalable-software","title":"02 - Deploy scalable software"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/assignment-2","title":"Assignment 2"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-1","title":"Week 1: Provision and deploy a server"}}},{"node":{"fields":{"slug":"/","title":"Cloud Native Applications (2DV013)"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-2","title":"Week 2: A server app in a container"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-3","title":"Week 3: Databases and Compose"}}},{"node":{"fields":{"slug":"/group-project/assignment-3","title":"Assignment 3"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-4","title":"Week 4: Kubernetes locally"}}},{"node":{"fields":{"slug":"/group-project/kravspec-egen","title":"Kravspec (egen)"}}},{"node":{"fields":{"slug":"/group-project/kravspec-standard","title":"Kravspec (standard)"}}},{"node":{"fields":{"slug":"/group-project/letter-to-customer","title":"Brev till företagskontakt"}}},{"node":{"fields":{"slug":"/group-project/week-12","title":"Course week 12: Project kick-off"}}},{"node":{"fields":{"slug":"/group-project/week-20","title":"Course week 20: Delivery and presentation"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-5","title":"Week 5: A real cluster"}}},{"node":{"fields":{"slug":"/group-project","title":"03 - Group Project"}}},{"node":{"fields":{"slug":"/deploy-scalable-software/week-6","title":"Week 6: Release and wrap up"}}},{"node":{"fields":{"slug":"/infrastructure/assignment","title":"Assignment 1"}}},{"node":{"fields":{"slug":"/infrastructure/cloud","title":"University Cloud"}}},{"node":{"fields":{"slug":"/infrastructure","title":"01 - Infrastructure"}}},{"node":{"fields":{"slug":"/infrastructure/wsl","title":"WSL"}}},{"node":{"fields":{"slug":"/study-guide/communication","title":"Communication"}}},{"node":{"fields":{"slug":"/study-guide/exams","title":"Exams"}}},{"node":{"fields":{"slug":"/infrastructure/overview","title":"Overview"}}},{"node":{"fields":{"slug":"/study-guide/expectations","title":"Expectations"}}},{"node":{"fields":{"slug":"/study-guide","title":"Study Guide"}}},{"node":{"fields":{"slug":"/study-guide/instructors","title":"Instructors"}}},{"node":{"fields":{"slug":"/study-guide/readings","title":"Readings"}}},{"node":{"fields":{"slug":"/what-is-cloud-native","title":"0 - What is cloud native?"}}},{"node":{"fields":{"slug":"/what-is-cloud-native/overview","title":"Overview"}}},{"node":{"fields":{"slug":"/study-guide/registration","title":"Registration"}}}]}},"pageContext":{"id":"381fbc55-f9b6-5573-8aca-29f03eb7ee74"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}