{
    "componentChunkName": "component---src-templates-note-note-js",
    "path": "/notes/CRDT",
    "result": {"data":{"mdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\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; }\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/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"conflict free replicated data type\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://chat.openai.com/c/36b82357-e55e-4684-9bf3-eb6c71062abf\"\n  }, \"https://chat.openai.com/c/36b82357-e55e-4684-9bf3-eb6c71062abf\")), mdx(\"p\", null, \"read about \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/notes/yjs\",\n    \"title\": \"yjs\"\n  }, \"yjs\"), \"\"), mdx(\"h2\", null, \"others\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"operational transformations\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/notes/diff-match-patch\",\n    \"title\": \"diff-match-patch\"\n  }, \"diff-match-patch\"), \"\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/notes/firebase\",\n    \"title\": \"firebase\"\n  }, \"firebase\"), \" and \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/notes/rethink-db\",\n    \"title\": \"rethink db\"\n  }, \"rethink db\"), \"\")), mdx(\"p\", null, \"The key principles of CRDTs are:\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/notes/Commutativity\",\n    \"title\": \"Commutativity\"\n  }, \"Commutativity\"), \": Operations on the data can be applied in any order and still reach the same final state\\n1\\n3\\n.\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/notes/Idempotence\",\n    \"title\": \"Idempotence\"\n  }, \"Idempotence\"), \": Applying the same operation multiple times has the same effect as applying it once\\n3\\n.\\nConvergence: When all updates have been received, all replicas will converge to the same final state\\n1\"), mdx(\"p\", null, \"an intuitive conflict resolution is not possible in crdt. \"), mdx(\"p\", null, \"\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/notes/RIA\",\n    \"title\": \"RIA\"\n  }, \"RIA\"), \" \"), mdx(\"h2\", null, \"others\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"auto merge \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"log root\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"extremely easy to implement badly\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"interleaving is a problem\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"vector block\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"trees and timestamp\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"semi lattice, order theory\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"rga\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"crdt and bft\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/notes/consistency-versus-consensus\",\n    \"title\": \"consistency versus consensus\"\n  }, \"consistency versus consensus\"), \"\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Martin clipman\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"crdt - non academy introduction\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"crdt hard parts\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"add versus Max - distributed counter \")));\n}\n;\nMDXContent.isMDXComponent = true;","inboundReferences":[{"id":"e386f81c-42e9-5c0a-a5f6-9ff8b7fb8723","slug":"eventual-strong-consistency"}]}},"pageContext":{"slug":"CRDT","node":{"childMdx":{"slug":"CRDT"}}}},
    "staticQueryHashes": []}