From bbc80cd0041d703b5710e1dc6db1f6be7aa74f67 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Tue, 5 Dec 2023 16:54:22 -0600 Subject: [PATCH 01/14] wip --- source/figures/documentdb.avif | Bin 0 -> 42950 bytes source/mongodb-vs-documentdb.txt | 216 +++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100644 source/figures/documentdb.avif create mode 100644 source/mongodb-vs-documentdb.txt diff --git a/source/figures/documentdb.avif b/source/figures/documentdb.avif new file mode 100644 index 0000000000000000000000000000000000000000..052cafd91b59aebf5b00fb1b5643f7b3d9061117 GIT binary patch literal 42950 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

ls{fOf#1ynrB9q@ZH8SKyIDKjWZ;+GI2 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 FdVcl&IvoH2 literal 0 HcmV?d00001 diff --git a/source/mongodb-vs-documentdb.txt b/source/mongodb-vs-documentdb.txt new file mode 100644 index 000000000..0dbbb9cc1 --- /dev/null +++ b/source/mongodb-vs-documentdb.txt @@ -0,0 +1,216 @@ +.. _mongodb-vs-documentdb: + +====================== +MongoDB vs. DocumentDB +====================== + +.. contents:: On this page + :local: + :backlinks: none + :depth: 1 + +It may seem that there are multiple options for deploying MongoDB in the cloud. +Amazon DocumentDB, for example, claims to be an AWS-native database with full support for +the MongoDB API. While they support some MongoDB features, it is important to note that +DocumentDB is not fully compatible. The only place to access fully-featured MongoDB as +a service on AWS is through MongoDB Atlas. + +In this comparison we aim to explain the differences between Amazon DocumentDB and +MongoDB Atlas, focusing around the following key areas: + +- **Compatibility**: Amazon claims that migrating an application from MongoDB to DocumentDB + is "as easy as changing the database endpoint to the new Amazon DocumentDB cluster". + We have debunked this by running a suite of compatibility tests, which show that + DocumentDB is only ~34% compatible with the features and functionality available in + MongoDB Atlas. +- **Architecture**: Amazon DocumentDB is built on top of AWS's Aurora platform, which has + historically been used to host relational databases. This has implications on + scalability and the potential for adding more native MongoDB features in the future. + DocumentDB can be deployed using Elastic Clusters, which impose additional operational + constraints. +- **Deployment**: Amazon's DocumentDB relies on AWS's proprietary technology, and there + is no way to run the database outside of AWS. +- **Developer Productivity**: DocumentDB lacks native integration with features or tools + to support mobile, time series, search, and analytical use cases. Users must take on the + operational burden of moving data out of DocumentDB and into other services in order to + access features to support those workloads. +- **Operational Maturity**: Database management and maintenance in DocumentDB is held + back by limited tooling, a complex upgrade process, few backup options, and gaps in + security features. + +What is DocumentDB? +------------------- + +Amazon DocumentDB is a NoSQL JSON document database service with a limited degree of +compatibility with MongoDB. + +DocumentDB is not based on the MongoDB server. Rather it emulates the MongoDB API, and +runs on top of Amazon's Aurora backend platform. This creates significant architectural +constraints, functionality limitations and broken compatibility. + +DocumentDB claims to support the MongoDB 4.0 API, which implies that it is at parity with +MongoDB v4.0, released back in June 2018. However this is partially true, as the majority +of MongoDB 4.0 differentiating features are not supported by DocumentDB. In addition, +compatibility testing reveals it fails over 66% of the MongoDB API correctness tests. +Applications written for MongoDB will need to be re-written to work with Amazon DocumentDB. + +.. image:: /figures/documentdb.avif + :alt: Comparison of Amazon DocumentDB and MongoDB + +.. tip:: DocumentDB Compatibility with MongoDB + + For the latest information about DocumentDB's compatibility with the MongoDB API, + see `Is DocumentDB Really MongoDB? `__ + +The key differences between DocumentDB and MongoDB's on-demand, elastic, and fully +managed Atlas service are summarized below. + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :widths: 10 20 20 + + * - Fully compatible with MongoDB + - No, incomplete. Imitation API fails 66% of correctness tests + - Yes + + * - Support for latest MongoDB version + - No. Feature set resembles MongoDB 3.0/3.2, released in 2015. + - Yes. MongoDB 7.0 + +Scale writes and partition data beyond a single node / Sharding support +Limited +Sharding available within an Elastic Cluster deployment. + +Only hash-sharding. Prone to develop hot partitions. Elastic Clusters impose additional functionality limitations. + +Yes +Full support for multiple sharding methodologies, including hash, range, and geo-zone. + +Replicate and scale beyond a single region / Comply with data locality regulations and survive regional outages +No +Limited to 20 clusters per region, with 32 shards per cluster and 2 instances per shard. All constrained to a single region. + +Yes +Global clusters, with up to 50 replicas per shard across multiple regions + +High resilience, rapid failure recovery, fast failover, retryable writes, multi-region +No +~120 second failover, no retryable writes, no multi-region within a single or elastic cluster + +Yes +Typical failover sub-5 seconds, retryable reads and writes, multi-region & multi-cloud clusters + +Multi-statement distributed ACID transactions +Limited +Ambiguous commits, poor error handling, small data sizes. Transactions not supported across shards in Elastic Clusters. + +Yes +Integrated text search, geospatial processing, graph traversals +Limited +Data replicated to multiple prerequisite bolt-on AWS services for text search, and only basic geospatial operators, adding cost and complexity + +Yes +All available from a single API and platform + +Native support for time series data +No +Yes +Hedged Reads + +Queries submitted to multiple replicas for consistent low latency + +No +Yes +Online Archive + +Automatically tier data out from database to cloud object storage (Amazon S3) + +No +Yes +Online Archive + +Integrated querying of data in Amazon S3 +No +Data must be replicated to multiple adjacent AWS services, driving up cost and complexity + +Yes +Atlas Data Federation + +On-demand Materialized Views +No +Yes +$merge aggregation stage + +Schema governance +No +Schema controls must be enforced in the app + +Yes +JSON schema + +Rich data types +Limited +DocumentDB supports storing decimal128 values, but none of the powerful aggregation features for working with them. + +Yes +Reactive, event-driven data pipelines +Limited +Change streams run against primary only & incur additional cost. + +Yes +MongoDB Change Streams & Atlas Triggers + +Support for role-based access control and authentication restrictions +Limited +Coarse-grained roles only + +Yes +Fine-grained monitoring telemetry & prescriptive performance recommendations +No +<50 metrics + +Yes +100+ metrics. Performance Advisor for index and schema recommendations + +Client-side field level encryption for fine-grained separation of duties in the cloud +No +Yes +Queryable Encryption +No +Yes +Available in MongoDB 7.0 + +Availability of advanced developer and analysis tools +Limited +Yes +MongoDB Compass, Charts, SQL Connector, Tableau Connector, Power BI Connector, Spark Connector + +Freedom from vendor lock-in +No +AWS only + +Yes +AWS, Azure, and Google Cloud. Available on 110+ regions + +Develop & run anywhere +On your mobile device, on your laptop, in your own data center, and in hybrid configurations + +No +AWS only + +Yes +Atlas App Services / MongoDB Server / multi-cloud clusters in Atlas + +Mobile & Edge Sync +No + +Data must be replicated to multiple adjacent AWS services, driving up cost and complexity + +Yes + +Atlas for the Edge +Access to MongoDB expertise +No +Yes +Hundreds of engineers with multi-year MongoDB development, support, and consulting experience. \ No newline at end of file From 479d103a4205450c7e25c32a6376a1779a7c4d56 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Wed, 6 Dec 2023 12:15:10 -0600 Subject: [PATCH 02/14] wip --- source/mongodb-vs-documentdb.txt | 404 ++++++++++++++++++++----------- 1 file changed, 258 insertions(+), 146 deletions(-) diff --git a/source/mongodb-vs-documentdb.txt b/source/mongodb-vs-documentdb.txt index 0dbbb9cc1..25d6d0afe 100644 --- a/source/mongodb-vs-documentdb.txt +++ b/source/mongodb-vs-documentdb.txt @@ -1,13 +1,13 @@ .. _mongodb-vs-documentdb: -====================== -MongoDB vs. DocumentDB -====================== +========================= +MongoDB Versus DocumentDB +========================= .. contents:: On this page :local: :backlinks: none - :depth: 1 + :depth: 2 It may seem that there are multiple options for deploying MongoDB in the cloud. Amazon DocumentDB, for example, claims to be an AWS-native database with full support for @@ -15,8 +15,8 @@ the MongoDB API. While they support some MongoDB features, it is important to no DocumentDB is not fully compatible. The only place to access fully-featured MongoDB as a service on AWS is through MongoDB Atlas. -In this comparison we aim to explain the differences between Amazon DocumentDB and -MongoDB Atlas, focusing around the following key areas: +In this comparison, we aim to explain the differences between Amazon DocumentDB and +MongoDB Atlas, focusing on the following key areas: - **Compatibility**: Amazon claims that migrating an application from MongoDB to DocumentDB is "as easy as changing the database endpoint to the new Amazon DocumentDB cluster". @@ -24,35 +24,37 @@ MongoDB Atlas, focusing around the following key areas: DocumentDB is only ~34% compatible with the features and functionality available in MongoDB Atlas. - **Architecture**: Amazon DocumentDB is built on top of AWS's Aurora platform, which has - historically been used to host relational databases. This has implications on - scalability and the potential for adding more native MongoDB features in the future. + historically been used to host relational databases. This has implications for + scalability and the potential to add more native MongoDB features in the future. DocumentDB can be deployed using Elastic Clusters, which impose additional operational constraints. -- **Deployment**: Amazon's DocumentDB relies on AWS's proprietary technology, and there +- **Deployment**: DocumentDB relies on AWS's proprietary technology, and there is no way to run the database outside of AWS. - **Developer Productivity**: DocumentDB lacks native integration with features or tools - to support mobile, time series, search, and analytical use cases. Users must take on the + to support mobile, time-series, search, and analytical use cases. Users must take on the operational burden of moving data out of DocumentDB and into other services in order to access features to support those workloads. - **Operational Maturity**: Database management and maintenance in DocumentDB is held back by limited tooling, a complex upgrade process, few backup options, and gaps in security features. -What is DocumentDB? +What Is DocumentDB? ------------------- -Amazon DocumentDB is a NoSQL JSON document database service with a limited degree of +Amazon DocumentDB is a NoSQL, JSON document database service with a limited degree of compatibility with MongoDB. -DocumentDB is not based on the MongoDB server. Rather it emulates the MongoDB API, and +DocumentDB is **not based on MongoDB Server.** Rather, it emulates the MongoDB API, and runs on top of Amazon's Aurora backend platform. This creates significant architectural -constraints, functionality limitations and broken compatibility. +constraints, functionality limitations, and broken compatibility. DocumentDB claims to support the MongoDB 4.0 API, which implies that it is at parity with -MongoDB v4.0, released back in June 2018. However this is partially true, as the majority -of MongoDB 4.0 differentiating features are not supported by DocumentDB. In addition, -compatibility testing reveals it fails over 66% of the MongoDB API correctness tests. -Applications written for MongoDB will need to be re-written to work with Amazon DocumentDB. +MongoDB v4.0, released back in June 2018. However, this is only partially true, as the +majority +of MongoDB 4.0's differentiating features are not supported by DocumentDB. In addition, +compatibility testing reveals that +**DocumentDB fails more than 66% of the MongoDB API correctness tests.** +Applications written for MongoDB will need to be rewritten to work with Amazon DocumentDB. .. image:: /figures/documentdb.avif :alt: Comparison of Amazon DocumentDB and MongoDB @@ -63,154 +65,264 @@ Applications written for MongoDB will need to be re-written to work with Amazon see `Is DocumentDB Really MongoDB? `__ The key differences between DocumentDB and MongoDB's on-demand, elastic, and fully -managed Atlas service are summarized below. +managed `Atlas service `__ are summarized below. .. list-table:: :header-rows: 1 :stub-columns: 1 :widths: 10 20 20 + * - + - Amazon DocumentDB + - MongoDB Atlas + * - Fully compatible with MongoDB - - No, incomplete. Imitation API fails 66% of correctness tests - - Yes + - **No.** Compatibility is incomplete. Imitation API fails 66% of correctness tests. + - **Yes.** * - Support for latest MongoDB version - - No. Feature set resembles MongoDB 3.0/3.2, released in 2015. - - Yes. MongoDB 7.0 - -Scale writes and partition data beyond a single node / Sharding support -Limited -Sharding available within an Elastic Cluster deployment. - -Only hash-sharding. Prone to develop hot partitions. Elastic Clusters impose additional functionality limitations. - -Yes -Full support for multiple sharding methodologies, including hash, range, and geo-zone. - -Replicate and scale beyond a single region / Comply with data locality regulations and survive regional outages -No -Limited to 20 clusters per region, with 32 shards per cluster and 2 instances per shard. All constrained to a single region. - -Yes -Global clusters, with up to 50 replicas per shard across multiple regions - -High resilience, rapid failure recovery, fast failover, retryable writes, multi-region -No -~120 second failover, no retryable writes, no multi-region within a single or elastic cluster - -Yes -Typical failover sub-5 seconds, retryable reads and writes, multi-region & multi-cloud clusters - -Multi-statement distributed ACID transactions -Limited -Ambiguous commits, poor error handling, small data sizes. Transactions not supported across shards in Elastic Clusters. - -Yes -Integrated text search, geospatial processing, graph traversals -Limited -Data replicated to multiple prerequisite bolt-on AWS services for text search, and only basic geospatial operators, adding cost and complexity - -Yes -All available from a single API and platform - -Native support for time series data -No -Yes -Hedged Reads - -Queries submitted to multiple replicas for consistent low latency - -No -Yes -Online Archive - -Automatically tier data out from database to cloud object storage (Amazon S3) - -No -Yes -Online Archive - -Integrated querying of data in Amazon S3 -No -Data must be replicated to multiple adjacent AWS services, driving up cost and complexity - -Yes -Atlas Data Federation - -On-demand Materialized Views -No -Yes -$merge aggregation stage - -Schema governance -No -Schema controls must be enforced in the app - -Yes -JSON schema - -Rich data types -Limited -DocumentDB supports storing decimal128 values, but none of the powerful aggregation features for working with them. - -Yes -Reactive, event-driven data pipelines -Limited -Change streams run against primary only & incur additional cost. - -Yes -MongoDB Change Streams & Atlas Triggers + - **No.** Feature set resembles MongoDB 3.0/3.2, released in 2015. + - **Yes.** Supports MongoDB 7.0. + + * - Scale writes and partition data beyond a single node / Sharding support + - **Limited.** Sharding available within an Elastic Cluster deployment. + Only hash-sharding. Prone to develop hot partitions. Elastic Clusters impose + additional functionality limitations. + - **Yes.** Full support for multiple sharding methodologies, including hash, range, + and geo-zone. + + * - Replicate and scale beyond a single region / Comply with data locality regulations + and survive regional outages + - **No.** Limited to 20 clusters per region, with 32 shards per cluster and 2 instances + per shard. All constrained to a single region. + - **Yes.** Global clusters, with up to 50 replicas per shard across multiple regions. + + * - High resilience, rapid failure recovery, fast failover, retryable writes, multi-region + - **No.** ~120-second failover, no retryable writes, no multi-region within a single + or elastic cluster. + - **Yes.** Typical failover under 5 seconds, retryable reads and writes, multi-region + and multi-cloud clusters. + + * - Multi-statement distributed ACID transactions + - **Limited.** Ambiguous commits, poor error handling, small data sizes. + Transactions not supported across shards in Elastic Clusters. + - **Yes.** + + * - Integrated text search, geospatial processing, graph traversals + - **Limited.** Data replicated to multiple prerequisite bolt-on AWS services for + text search, and only basic geospatial operators, adding cost and complexity. + - **Yes.** All available from a single API and platform. + + * - Native support for time-series data + - **No.** + - **Yes.** + + * - Hedged Reads: Queries submitted to multiple replicas for consistent low latency + - **No.** + - **Yes.** + + * - Online Archive: Automatically tier data out from database to cloud object storage (Amazon S3) + - **No.** + - **Yes.** `Online Archive `__ + + * - Integrated querying of data in Amazon S3 + - **No.** Data must be replicated to multiple adjacent AWS services, driving up cost + and complexity + - **Yes.** `Atlas Data Federation `__ + + * - On-demand Materialized Views + - **No.** + - **Yes.** ``$merge`` aggregation stage. + + * - Schema governance + - **No.** Schema controls must be enforced in the app. + - **Yes.** JSON schema. + + * - Rich data types + - **Limited.** DocumentDB supports storing ``decimal128`` values, but none of the + powerful aggregation features for working with them. + - **Yes.** + + * - Reactive, event-driven data pipelines + - **Limited.** Change streams run against primary only and incur additional cost. + - **Yes.** MongoDB Change Streams & Atlas Triggers. + + * - Support for role-based access control and authentication restrictions + - **Limited.** Coarse-grained roles only. + - **Yes.** + + * - Fine-grained monitoring telemetry & prescriptive performance recommendations + - **No.** Fewer than 50 metrics. + - **Yes.** More than 100 metrics. Performance Advisor for index and schema recommendations. + + * - Client-side field level encryption for fine-grained separation of duties in the cloud + - **No.** + - **Yes.** + + * - Queryable Encryption + - **No.** + - **Yes.** Available in MongoDB 7.0 and later versions. + + * - Availability of advanced developer and analysis tools + - **Limited.** + - **Yes.** MongoDB Compass, Charts, SQL Connector, Tableau Connector, Power BI + Connector, Spark Connector. + + * - Freedom from vendor lock-in + - **No.** AWS only. + - **Yes.** AWS, Azure, and Google Cloud. Available on more than 110 regions. + + * - Develop and run anywhere: on your mobile device, on your laptop, in your own data + center, and in hybrid configurations. + - **No.** AWS only. + - **Yes.** Atlas App Services / MongoDB Server / multi-cloud clusters in Atlas. + + * - Mobile and Edge Sync + - **No.** Data must be replicated to multiple adjacent AWS services, driving up cost + and complexity. + - **Yes.** Atlas for the Edge. + + * - Access to MongoDB expertise + - **No.** + - **Yes.** Hundreds of engineers with multi-year MongoDB development, support, and + consulting experience. + +What Is MongoDB Atlas? +---------------------- + +MongoDB offers the fully managed, on-demand and global MongoDB Atlas service, in the +public cloud. Atlas enables customers to deploy, operate, and scale MongoDB databases +on AWS, Azure, or Google Cloud. MongoDB Atlas is available through a pay-as-you-go model +and billed on an hourly basis. It's easy to get started - use a simple GUI or programmatic +API calls to select the public cloud provider, region, instance size, and features you +need. MongoDB Atlas provides: + +Automated database and infrastructure provisioning along with auto-scaling so teams can +get the database resources they need, when they need them, and can elastically scale in +response to application demands. + +Security features to protect your data, with network isolation, fine-grained access +control, auditing, and end-to-end encryption down to the level of individual fields, +enabling you to comply with regulations such as ISO, HIPAA and GDPR. Built in replication +both within and across regions for always-on availability. + +Global Clusters for a fully managed, globally distributed database that provides low +latency, responsive reads and writes to users anywhere, with strong data placement +controls for regulatory compliance. + +Combined transactional and analytical capabilities with Atlas Analytics Nodes to isolate +analytics queries from operational workloads while providing real-time insight. Native +MongoDB analytics tools, such as MongoDB Charts and MongoDB Connectors (for SQL, Tableau, +Power BI and Spark) are configured to utilize Analytics Nodes by default. MongoDB's rich +aggregation pipeline engine allows users to run expressive queries against their data. + +Fully integrated native MongoDB data visualization tools - MongoDB Charts, which supports +the full richness of the document model, including nested, hierarchical and geospatial +data and provide embedding and sharing capabilities. Quickly build visualizations of your +data without needing to deploy or manage any software or infrastructure. + +Fully integrated MongoDB Atlas Data Federation which allows users to quickly run federated +queries across Atlas clusters and data stored on Amazon S3 in many formats. The MongoDB +Query Language (MQL) and tools allow users to get value from data faster. + +Fully managed backups with point in time recovery to protect against data corruption, and +the ability to query backups in-place without full restores. + +Automatic data tiering which helps lower costs by moving data to lower cost storage such +as Amazon S3. + +Fine-grained monitoring and customizable alerts for comprehensive performance visibility. +Automated patching and single-click upgrades for new major versions of the database, +enabling you to take advantage of the latest MongoDB features. + +Access to the Atlas App Services, with Data Access Controls, Functions, and Triggers +delivered in a completely serverless model. + +Native time-series support optimized for both highly performant data ingestion and +querying, along with reduced I/O and storage overhead + +The full text Atlas Search service providing rich search capabilities against your fully +managed databases with no additional infrastructure or systems to provision, manage, or scale. + +Live migration to move your self-managed MongoDB clusters into the Atlas service or to +move Atlas clusters between cloud providers. + +Stable API to make upgrades risk-free, future-proofing your development + +Widespread coverage on the major cloud platforms with availability in 110+ cloud regions +across Amazon Web Services, Microsoft Azure, and Google Cloud. MongoDB Atlas delivers a +consistent experience across each of the cloud platforms, ensuring developers can deploy +wherever they need to, without compromising critical functionality or risking lock-in. + +MongoDB Atlas is serving a vast range of workloads for startups, Fortune 500 companies, +and government agencies, including mission-critical applications handling highly sensitive +data in regulated industries. The developer experience across MongoDB Atlas and +self-managed MongoDB is consistent, ensuring that you easily move from on-premises to +the public cloud, and between providers as your needs evolve. + +Beyond the database, MongoDB Atlas Data Federation allows you to simultaneously query +data in any format on Amazon S3 and in Atlas clusters using the MongoDB Query Language +(MQL). With Atlas Data Federation you can realize the value of your S3 data lake faster: +you don't have to move data anywhere, you can work with complex data immediately in its +native form, and with its fully-managed, serverless architecture, you control costs and +remove the operational burden. DocumentDB offers no equivalent capability, and so users +must spin up an entirely separate service with a different query language to access S3 +data. + +Built and run by the same team that develops the data platform, MongoDB Atlas is the best +way to run MongoDB apps. + +Is DocumentDB Compatible with MongoDB? +-------------------------------------- + +Amazon DocumentDB claims to support the MongoDB 4.0 API, which implies that it is at +parity with MongoDB v4.0, released back in June 2018. In actual fact, the DocumentDB 4.0 +feature set still closely resembles early MongoDB 3.0 and 3.2, released in 2015, and compatibility testing reveals it fails 66% of the MongoDB API correctness tests. Applications written for MongoDB will need to be rewritten to work with Amazon DocumentDB. However, since DocumentDB emulates a MongoDB API, applications written for DocumentDB can be easily migrated into MongoDB Atlas. + +Want to learn more? +------------------- -Support for role-based access control and authentication restrictions -Limited -Coarse-grained roles only +Interested in migrating from DocumentDB to MongoDB Atlas? Please refer to our migration guide. -Yes -Fine-grained monitoring telemetry & prescriptive performance recommendations -No -<50 metrics +Interested in up-to-date results on DocumentDB's compatibility with the MongoDB API? Get the latest results at Is DocumentDB Really MongoDB?. -Yes -100+ metrics. Performance Advisor for index and schema recommendations +Try MongoDB Atlas for free for a real MongoDB experience. -Client-side field level encryption for fine-grained separation of duties in the cloud -No -Yes -Queryable Encryption -No -Yes -Available in MongoDB 7.0 +FAQs +---- -Availability of advanced developer and analysis tools -Limited -Yes -MongoDB Compass, Charts, SQL Connector, Tableau Connector, Power BI Connector, Spark Connector +When should I use a document database? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Freedom from vendor lock-in -No -AWS only +Document databases store data in JSON-like documents which allows them to be inherently +easy for developers to work with. MongoDB is a modern document database which contains +many of the powerful features found in popular relational databases. These include +ACID-compliant transactions, schema governance, enterprise-grade security, and more. -Yes -AWS, Azure, and Google Cloud. Available on 110+ regions +Can MongoDB read data from Amazon S3? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Develop & run anywhere -On your mobile device, on your laptop, in your own data center, and in hybrid configurations +MongoDB offers the Atlas Data Federation engine, which allows users to quickly and easily +query data in any format on Amazon S3 using the MongoDB Query API. -No -AWS only +What are the key differences between MongoDB and DocumentDB? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Yes -Atlas App Services / MongoDB Server / multi-cloud clusters in Atlas +DocumentDB does not contain any MongoDB code, supports a limited subset of MongoDB +features, and is more costly and difficult to manage. -Mobile & Edge Sync -No +Is MongoDB a good fit for mobile and edge use cases? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Data must be replicated to multiple adjacent AWS services, driving up cost and complexity +MongoDB offers Atlas for the Edge, a solution that streamlines data management between +mobile and edge devices with an offline-first approach. This means that synchronization and +conflict resolution are automatically handled in any case, regardless of network +connectivity. Atlas for the Edge also allows users to process data on-premise in Edge +Servers, reducing the distance between edge devices and compute, and therefore decreasing +latency. -Yes +Is MongoDB a good fit for web applications? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Atlas for the Edge -Access to MongoDB expertise -No -Yes -Hundreds of engineers with multi-year MongoDB development, support, and consulting experience. \ No newline at end of file +As part of its developer data platform, MongoDB Atlas Application Services offers a suite +of tools for building web applications. From 06971128909565c94e31933db9d9aecdc174bc82 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Wed, 6 Dec 2023 15:05:46 -0600 Subject: [PATCH 03/14] wip --- source/index.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/index.txt b/source/index.txt index a1fda8caa..69f97044f 100644 --- a/source/index.txt +++ b/source/index.txt @@ -143,6 +143,13 @@ Featured Community-Supported Libraries Don’t see your desired language? Browse more `community-supported libraries `__. +Comparison with Other Document Databases +---------------------------------------- + +See the following pages to learn about the differences between MongoDB and other +document databases: + +- :ref:`mongodb-vs-documentdb` .. toctree:: From 1920c57014e204a222422111dc08c56e0c2cfc65 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Wed, 6 Dec 2023 15:06:03 -0600 Subject: [PATCH 04/14] wip --- source/index.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.txt b/source/index.txt index 69f97044f..e5d348023 100644 --- a/source/index.txt +++ b/source/index.txt @@ -141,7 +141,7 @@ Featured Community-Supported Libraries :icon: /icons/r.svg :icon-alt: R icon -Don’t see your desired language? Browse more `community-supported libraries `__. +Don't see your desired language? Browse more `community-supported libraries `__. Comparison with Other Document Databases ---------------------------------------- From ef26312393079a954085b57c5622463239630187 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Wed, 6 Dec 2023 16:25:13 -0600 Subject: [PATCH 05/14] wip --- source/mongodb-vs-documentdb.txt | 163 +++++++++++++++++-------------- 1 file changed, 90 insertions(+), 73 deletions(-) diff --git a/source/mongodb-vs-documentdb.txt b/source/mongodb-vs-documentdb.txt index 25d6d0afe..75be5d99c 100644 --- a/source/mongodb-vs-documentdb.txt +++ b/source/mongodb-vs-documentdb.txt @@ -59,13 +59,9 @@ Applications written for MongoDB will need to be rewritten to work with Amazon D .. image:: /figures/documentdb.avif :alt: Comparison of Amazon DocumentDB and MongoDB -.. tip:: DocumentDB Compatibility with MongoDB - - For the latest information about DocumentDB's compatibility with the MongoDB API, - see `Is DocumentDB Really MongoDB? `__ - -The key differences between DocumentDB and MongoDB's on-demand, elastic, and fully -managed `Atlas service `__ are summarized below. +The following table summarizes the key differences between DocumentDB and MongoDB's +on-demand, elastic, and fully managed +`Atlas service `__: .. list-table:: :header-rows: 1 @@ -161,7 +157,8 @@ managed `Atlas service `__ are summarized b * - Queryable Encryption - **No.** - - **Yes.** Available in MongoDB 7.0 and later versions. + - **Yes.** `Available in MongoDB 7.0 `__ + and later versions. * - Availability of advanced developer and analysis tools - **Limited.** @@ -175,12 +172,13 @@ managed `Atlas service `__ are summarized b * - Develop and run anywhere: on your mobile device, on your laptop, in your own data center, and in hybrid configurations. - **No.** AWS only. - - **Yes.** Atlas App Services / MongoDB Server / multi-cloud clusters in Atlas. + - **Yes.** `Atlas App Services `__ + / MongoDB Server / multi-cloud clusters in Atlas. * - Mobile and Edge Sync - **No.** Data must be replicated to multiple adjacent AWS services, driving up cost and complexity. - - **Yes.** Atlas for the Edge. + - **Yes.** `Atlas for the Edge. `__ * - Access to MongoDB expertise - **No.** @@ -190,81 +188,91 @@ managed `Atlas service `__ are summarized b What Is MongoDB Atlas? ---------------------- -MongoDB offers the fully managed, on-demand and global MongoDB Atlas service, in the +MongoDB offers the fully managed, on-demand, and global +`MongoDB Atlas `__ service in the public cloud. Atlas enables customers to deploy, operate, and scale MongoDB databases on AWS, Azure, or Google Cloud. MongoDB Atlas is available through a pay-as-you-go model -and billed on an hourly basis. It's easy to get started - use a simple GUI or programmatic +and billed on an hourly basis. It's easy to get started--use a simple GUI or programmatic API calls to select the public cloud provider, region, instance size, and features you -need. MongoDB Atlas provides: +need. + +MongoDB Atlas provides: -Automated database and infrastructure provisioning along with auto-scaling so teams can -get the database resources they need, when they need them, and can elastically scale in -response to application demands. +- Automated database and infrastructure provisioning, along with autoscaling, so teams can + get the database resources they need, when they need them, and can elastically scale in + response to application demands. -Security features to protect your data, with network isolation, fine-grained access -control, auditing, and end-to-end encryption down to the level of individual fields, -enabling you to comply with regulations such as ISO, HIPAA and GDPR. Built in replication -both within and across regions for always-on availability. +- Security features to protect your data, with network isolation, fine-grained access + control, auditing, and end-to-end encryption down to the level of individual fields, + enabling you to comply with regulations such as ISO, HIPAA, and GDPR. Built-in + replication both within and across regions for always-on availability. -Global Clusters for a fully managed, globally distributed database that provides low -latency, responsive reads and writes to users anywhere, with strong data placement -controls for regulatory compliance. +- Global Clusters for a fully managed, globally distributed database that provides low + latency and responsive reads and writes to users anywhere, with strong data placement + controls for regulatory compliance. -Combined transactional and analytical capabilities with Atlas Analytics Nodes to isolate -analytics queries from operational workloads while providing real-time insight. Native -MongoDB analytics tools, such as MongoDB Charts and MongoDB Connectors (for SQL, Tableau, -Power BI and Spark) are configured to utilize Analytics Nodes by default. MongoDB's rich -aggregation pipeline engine allows users to run expressive queries against their data. +- Combined transactional and analytical capabilities with Atlas Analytics Nodes to isolate + analytics queries from operational workloads while providing real-time insight. Native + MongoDB analytics tools, such as MongoDB Charts and MongoDB Connectors (for SQL, Tableau, + Power BI, and Spark), are configured to utilize Analytics Nodes by default. MongoDB's rich + aggregation pipeline engine allows users to run expressive queries against their data. -Fully integrated native MongoDB data visualization tools - MongoDB Charts, which supports -the full richness of the document model, including nested, hierarchical and geospatial -data and provide embedding and sharing capabilities. Quickly build visualizations of your -data without needing to deploy or manage any software or infrastructure. +- Fully integrated native MongoDB data visualization tools. MongoDB Charts supports + the full richness of the document model, including nested, hierarchical, and geospatial + data, and provides embedding and sharing capabilities. Quickly build visualizations of + your data without needing to deploy or manage any software or infrastructure. -Fully integrated MongoDB Atlas Data Federation which allows users to quickly run federated -queries across Atlas clusters and data stored on Amazon S3 in many formats. The MongoDB -Query Language (MQL) and tools allow users to get value from data faster. +- Fully integrated `MongoDB Atlas Data Federation `__, + which allows users to quickly run federated + queries across Atlas clusters and data stored on Amazon S3 in many formats. The MongoDB + Query Language (MQL) and tools allow users to get value from data faster. -Fully managed backups with point in time recovery to protect against data corruption, and -the ability to query backups in-place without full restores. +- Fully managed backups with point-in-time recovery to protect against data corruption and + the ability to query backups in-place without full restores. -Automatic data tiering which helps lower costs by moving data to lower cost storage such -as Amazon S3. +- `Automatic data tiering `__, which helps + lower costs by moving data to lower-cost storage such as Amazon S3. -Fine-grained monitoring and customizable alerts for comprehensive performance visibility. -Automated patching and single-click upgrades for new major versions of the database, -enabling you to take advantage of the latest MongoDB features. +- Fine-grained monitoring and customizable alerts for comprehensive performance visibility. + Automated patching and single-click upgrades for new major versions of the database, + enabling you to take advantage of the latest MongoDB features. -Access to the Atlas App Services, with Data Access Controls, Functions, and Triggers -delivered in a completely serverless model. +- Access to the `Atlas App Services `__, + with Data Access Controls, Functions, and Triggers + delivered in a completely serverless model. -Native time-series support optimized for both highly performant data ingestion and -querying, along with reduced I/O and storage overhead +- Native time-series support optimized for highly performant data ingestion and + querying, along with reduced I/O and storage overhead. -The full text Atlas Search service providing rich search capabilities against your fully -managed databases with no additional infrastructure or systems to provision, manage, or scale. +- The full-text `Atlas Search `__ + service, which provides rich search capabilities against + your fully managed databases with no additional infrastructure or systems to provision, + manage, or scale. -Live migration to move your self-managed MongoDB clusters into the Atlas service or to -move Atlas clusters between cloud providers. +- Live migration to move your self-managed MongoDB clusters into the Atlas service or to + move Atlas clusters between cloud providers. -Stable API to make upgrades risk-free, future-proofing your development +- `Stable API `__ + to make upgrades risk-free, future-proofing your development. -Widespread coverage on the major cloud platforms with availability in 110+ cloud regions -across Amazon Web Services, Microsoft Azure, and Google Cloud. MongoDB Atlas delivers a -consistent experience across each of the cloud platforms, ensuring developers can deploy -wherever they need to, without compromising critical functionality or risking lock-in. +- Widespread coverage on the major cloud platforms with availability in more than 110 + cloud regions across Amazon Web Services, Microsoft Azure, and Google Cloud. MongoDB + Atlas delivers a consistent experience across each of the cloud platforms, ensuring + developers can deploy wherever they need to without compromising critical functionality + or risking lock-in. -MongoDB Atlas is serving a vast range of workloads for startups, Fortune 500 companies, +`MongoDB Atlas `__ is serving a vast range of workloads for startups, Fortune 500 companies, and government agencies, including mission-critical applications handling highly sensitive data in regulated industries. The developer experience across MongoDB Atlas and -self-managed MongoDB is consistent, ensuring that you easily move from on-premises to -the public cloud, and between providers as your needs evolve. +self-managed MongoDB is consistent, ensuring that you can easily move from on-premises to +the public cloud, or between providers, as your needs evolve. -Beyond the database, MongoDB Atlas Data Federation allows you to simultaneously query +Beyond the database, `MongoDB Atlas Data Federation `__ +allows you to simultaneously query data in any format on Amazon S3 and in Atlas clusters using the MongoDB Query Language -(MQL). With Atlas Data Federation you can realize the value of your S3 data lake faster: -you don't have to move data anywhere, you can work with complex data immediately in its -native form, and with its fully-managed, serverless architecture, you control costs and +(MQL). With Atlas Data Federation, you can realize the value of your S3 data lake faster: +you don't have to move data anywhere; you can work with complex data immediately in its +native form; and with its fully managed, serverless architecture, you control costs and remove the operational burden. DocumentDB offers no equivalent capability, and so users must spin up an entirely separate service with a different query language to access S3 data. @@ -276,17 +284,25 @@ Is DocumentDB Compatible with MongoDB? -------------------------------------- Amazon DocumentDB claims to support the MongoDB 4.0 API, which implies that it is at -parity with MongoDB v4.0, released back in June 2018. In actual fact, the DocumentDB 4.0 -feature set still closely resembles early MongoDB 3.0 and 3.2, released in 2015, and compatibility testing reveals it fails 66% of the MongoDB API correctness tests. Applications written for MongoDB will need to be rewritten to work with Amazon DocumentDB. However, since DocumentDB emulates a MongoDB API, applications written for DocumentDB can be easily migrated into MongoDB Atlas. - -Want to learn more? +parity with MongoDB v4.0, released back in June 2018. In fact, the DocumentDB 4.0 +feature set still closely resembles early MongoDB 3.0 and 3.2, released in 2015, +and compatibility testing reveals that DocumentDB fails 66% of the MongoDB API +correctness tests. Applications written for MongoDB will need to be rewritten to work +with Amazon DocumentDB. However, since DocumentDB emulates a MongoDB API, applications +written for DocumentDB can be easily migrated into MongoDB Atlas. + +Want to Learn More? ------------------- -Interested in migrating from DocumentDB to MongoDB Atlas? Please refer to our migration guide. +Interested in migrating from DocumentDB to MongoDB Atlas? Please refer to our +migration guide. -Interested in up-to-date results on DocumentDB's compatibility with the MongoDB API? Get the latest results at Is DocumentDB Really MongoDB?. +Interested in up-to-date results on DocumentDB's compatibility with the MongoDB API? Get +the latest results at +`Is DocumentDB Really MongoDB? `__ -Try MongoDB Atlas for free for a real MongoDB experience. +`Try MongoDB Atlas for free `__ +for a real MongoDB experience. FAQs ---- @@ -294,8 +310,8 @@ FAQs When should I use a document database? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Document databases store data in JSON-like documents which allows them to be inherently -easy for developers to work with. MongoDB is a modern document database which contains +Document databases store data in JSON-like documents, which allows them to be inherently +easy for developers to work with. MongoDB is a modern document database that contains many of the powerful features found in popular relational databases. These include ACID-compliant transactions, schema governance, enterprise-grade security, and more. @@ -314,11 +330,12 @@ features, and is more costly and difficult to manage. Is MongoDB a good fit for mobile and edge use cases? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -MongoDB offers Atlas for the Edge, a solution that streamlines data management between +MongoDB offers `Atlas for the Edge `__, +a solution that streamlines data management between mobile and edge devices with an offline-first approach. This means that synchronization and conflict resolution are automatically handled in any case, regardless of network connectivity. Atlas for the Edge also allows users to process data on-premise in Edge -Servers, reducing the distance between edge devices and compute, and therefore decreasing +Servers, reducing the distance between edge devices and compute, thereby decreasing latency. Is MongoDB a good fit for web applications? From f5d585348e0fe58bd6b20c79ed00cb3d6c4d1a73 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Thu, 7 Dec 2023 12:59:31 -0600 Subject: [PATCH 06/14] original copy --- source/documentdb-support.txt | 70 +++++++ source/figures/documentdb.avif | Bin 42950 -> 0 bytes source/figures/documentdb.png | Bin 0 -> 48954 bytes source/mongodb-vs-documentdb.txt | 345 ------------------------------- 4 files changed, 70 insertions(+), 345 deletions(-) create mode 100644 source/documentdb-support.txt delete mode 100644 source/figures/documentdb.avif create mode 100644 source/figures/documentdb.png delete mode 100644 source/mongodb-vs-documentdb.txt diff --git a/source/documentdb-support.txt b/source/documentdb-support.txt new file mode 100644 index 000000000..6fe847042 --- /dev/null +++ b/source/documentdb-support.txt @@ -0,0 +1,70 @@ +.. _documentdb-support: + +================================ +Amazon DocumentDB Supportability +================================ + +.. contents:: On this page + :local: + :backlinks: none + :depth: 1 + +.. figure:: /figures/documentdb.png + :alt: Amazon DocumentDB logo + +`Amazon DocumentDB `__ +(with MongoDB compatibility) is a fast, reliable, and fully managed +database service. Amazon DocumentDB makes it easy to set up, operate, and scale +MongoDB-compatible databases in the cloud. With Amazon DocumentDB, you can run the same +application code and use the same drivers and tools that you use with MongoDB. + +Version Information +------------------- + +Amazon DocumentDB currently supports MongoDB 4.0 and MongoDB 5.0. These are several +major versions behind what `MongoDB Atlas `__ +currently offers (see `MongoDB Evolved – Version History `__ +for more information), and as a result are lacking support for newer features and +functionality. + +Compatibility +------------- + +AWS outlines to what degree DocumentDB is +`compatible with MongoDB 4.0 and MongoDB 5.0. `__ +There is additional documentation that lays out the functional differences between +`AWS DocumentDB and MongoDB. `__ + +A convenient list of tables of the +`supported MongoDB APIs, operations, and data types `__ +can also be found, but to summarize the following are either only available in a limited +capacity or not supported by DocumentDB: + +- Features: `Capped collections `__, + `Map-Reduce `__, + `GridFS `__, + `Text Indexes `__, + `Partial Indexes `__, + `Case-Insensitive Indexes `__ +- Commands: ``collMod``, ``createView``, ``filemd5``, ``reIndex``, ``connPoolStats``, + ``dbHash``, ``features``, Sharding commands (aside from ``enableSharding`` and + ``shardCollection``) +- Query Operators: ``$expr``, ``$text``, ``$where``, ``$meta``, ``$box``, ``$center``, + ``$centerSphere``, ``$polygon``, ``$near`` +- Aggregation Operators: ``$accumulator``, ``$count``, ``$ceil``, ``$exp``, ``$floor``, + ``$ln``, ``$log``, ``$log10``, ``$pow``, ``$sqrt``, ``$trunc``, ``$round``, ``$first``, + ``$last``, ``$switch``, ``$binarySize``, ``$bsonSize``, ``$dateFromParts``, + ``$dateToParts``, ``$dateTrunc``, ``$dateDiff``, ``$setDifference``, ``$anyElementTrue``, + ``$allElementsTrue``, ``$ltrim``, ``$rtrim``, ``$trim``, ``$regexFind``, + ``$regexFindAll``, ``$regexMatch``, ``$replaceOne``, ``$replaceAll``, ``$convert``, + ``$toBool``, ``$toDate``, ``$toDecimal``, ``$toDouble``, ``$toInt``, ``$toLong``, + ``$toObjectId``, ``$toString``, ``$isNumber``, ``$rand``, ``$sampleRate``, ``$getField`` +- Aggregation Stages: ``$collStats``, ``$facet``, ``$bucket``, ``$bucketAuto``, + ``$sortByCount``, ``$listLocalSessions``, ``$listSessions``, ``$graphLookup`` + +From the `Amazon DocumentDB / MongoDB compatibility tester site `__, as of November, 2023 +DocumentDB appears to only be 33.84% compatible (based on the MongoDB API Tester). + +Support +------- +MongoDB does not offer commercial support for AWS DocumentDB. For assistance with this product specifically AWS Support should be contacted directly. diff --git a/source/figures/documentdb.avif b/source/figures/documentdb.avif deleted file mode 100644 index 052cafd91b59aebf5b00fb1b5643f7b3d9061117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42950 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

ls{fOf#1ynrB9q@ZH8SKyIDKjWZ;+GI2 z_hPnLO->9Kq;<{vR?BzW_6@-em;Ti@Q7y4sAKyxXGa=K?cfvb3aSrd~<=97g<(!1X zZUqk_lHuW;Nsx#LopJJ=tEARY{lh(pCa_$o!*vnBV=dsbXD2dD#j3IuAuUe&q6I9j zpLHCi=LVI>6Juw8=sR3|K@0m@N`$+)IU-;i2Fz{5KKt6|`ptUkrc*H(8HaY<148(U zJ|Gr}X_Gkl9LQLhL^rl$fjuL5sDgP0UK;wNk^8!#@6Y&9OX_>X+VRD;-luzn@B4>D zM7MoEXEeTdJv_DH>j|Gi+V0xof5tR22VypQf(z(Wg`v#TGjgcp8WI%?P)v&%OrJ%_ zDe!;BL;DHYc{;K4ld$|SHvp}!mFDzoh$e~KFKdBNf*A|%r&t?U`r$seD#NdhtlqTk zXaoB>EynKkRpRM{cxsB6U5Nzaq|ik`y@yH zB<+@DBg?fYSEfUL)@dC%^~XI9w(a!Kff3VdJ{QMZL-ft&I%nIz4!;GNz=k053Tv@BNU08)AA8Y^)y#pjCfpw@C z@IwUU{nPbVpHJw%VaHgzeMFV;K9o(V3&zsSMX}*#)tD@kmH@#4qn&;-sKFnuS+sRW zDPuv=DsL$Z8dIrvh#BAj`*l~XZ~ZL2V35tU+Rm(!;vC>$>Am=mF$F2vW{stZJqJWK zH0Fst_>im(W4;>M!8a?xINYn%2UMU{Ces$`HyJTWq7gnb)HBmB;U+qYkRuMU$PXed z&h$a}gs$SWY5N8hZ95Ocz$%zmgrBRF4`eu89GOWLq8}d{ygT#VS#4t|0bhSHJ6@&1 z%6Hm0&<#tJWW4B*I~(O;kkH@J6wV~HwN~ScO14{N(Y7q@Ng#q{k1oSVe za5KN<$Ed!fjIz7iT{Vo%M8V45sMt~b?5=GK;FweKjQ|zl!#AE`JB8|CTc;&|5yu`j zh1L~<+&{}<>vM4Y6cyH;V#-%^0fz_=FIgl-^ zoPb(=dYYn*M~tGG;?~7@_wHdUXib`?%_>#99&Z6U(&2Gj8Im%xa}eaUhNf|8;Z5}& zu-VE%$gggzo7mROU)b5W$EB{h>UhXuC~ym;z!lrL1sP-JV|zu0@rh6T0$QiMInh50 zLGb?I1a?~shxqO3R6a@#E2hqXrlB{!F{{rv2??n^Lec}=;{(*@c|U;?*$AjvgKk4K4~!@={EH0rA}p)xn3+Ue8^M=e1AfGBEUzuDEeDSqbTf@rPG7;z zJTM>3At<3krXqy|>JkbZ$?n=~(o42)#?A0gaX-V%Xr}lw^W(On*Ep|aGMe~3tAV9; zbL!fySWjP`j%wU5qgdpC)jaOFgvX0E+veJCZr??c2I`!cQU&Ie^CaPOsj5z%^aC4e8EQJjXZ6H(zOvcKTq`{j4u2-e-vaR5EExR-Kfk zAzSLx44`m*=P}w~OC~jxt|Il8JKxl5TkE3ZZqIWfw`+ zDnJr25T6bQ9Dy4uYlQ|TKgO(*HnLr&yxpPX6Cdpi^YaSh=5rxv^y}G`V}6V7s4$p9 zU0R05yO=gJV3fv%X5H_ltNO;Q* z6yyvxWU@S81pqR6CS77UWWUk~1ckP7SNWb?V@WWR#@`d~?VkGa9;>yM7^Iv@;)GTW znQJ54rQ)!buKs1gK^8~!K|i9#HVoGgzK`(&_FHyd+O+w-0}LZx7u9#oMG0&+HGi7A zdUF-ts7t5K;J#YsIg-2B2Jog-T#0`0R-)oNiWW!b5hhO`P*(DQY8WggdRHkQ=vp;q zU6v7@%}o~z0+EJTedWMRI+`<(0xb~)@9t7u)Q=k)kJg~47Vy#7En?5MRu^3cyoaVZ zjJTW^WDXuCf#H3mRHewe?ow^F=%k^KN;od`(f*8v==P*pW<;sY3O4>Wr(ol^koRZP z8~1FbsL^$JE^@jFd{jwj=YFy%0WD3(nK((g@_3@^ba(d?aob_$SbzBil>!c3UVg5# zq%x^_jwyT8mdNxP!L+`Ipb4n3%Xav=uK>kOq`{w=zYZ0bGid_Z)1=gm7l`*XLB(6q zfcD~x^J*J+i!vbhPpyw;0P1`A772kq2n?^G@uBfi|W;Nefsz_}~67@PRA z7K6?JIv_+cOLw87uGP$hEJz$*e$o%|i5ym6&ce#N@qAhDLf8Q5d|X^r4G^M4W!G%4 zz}6#3($%)zo+Ut>8#={Uv6marrHe&fwTK>69M7VQAMaW{;qvT47;wC=XoAZ8na7&f ziIr`}g^K=k_3K^1#B?3~p>gdyH(aPlokzto1-IdDL6rZ$X$(6~V9%R-3&arP@)cw^6Du`hCJ0-)xw-ht-(-;W*=qELj4L8%Mo7eWbyLdU@903xA-h}7 z{3M0ft0TCnB~q&|^Yh72VpWU%sfy70Qk20&Eeh1m)X&}QRw`?vwzmKNp^!OvcAKya zTTC4=*SY?2Cr^vKj9JJ0BV<{^5|-j7r#qNg5l)+o(VD{0S*_$9KzGw^9<+Fb&T;w7 z6#v;{7d=D~SoF}BSK~)RoM9j`NDLg@5g>c!3#0Ggc9w+>u`qcZxB}@M=FQUP{&Y;j z%jxU2zb#eB&yR@ZDx~^7C18{R>2R@>AhiSaj!v{txNH=GunqQ zNTERjSfHgnSsEiV5ybSn_20QPY_z08zYNQNT4>JJDBpa<#FGyzag8^b7EFk_9h?ca zG|aJ~>l-GebxaHGZ>?^ddd&TrES$n7w+W&Vi-l2#hBAicaI$K%IX`#flwW(oIPJt* zmn?`BeAp@hFFA?q{Ls<6h8bO*Srnyg_eL>UU)S@-m)SjMf0D(!$|>KE$L9D*CLWa| z8BsUt9V+VWiizwm>-HSd4_RHszupXRw+GwtTaU0`MX@@7mqRi21|MIw7gUgLUNFLH z)dAj#dZ)0uBA*fv^1(lyY+f+$T!d>2|FLQvdLS;smIKeX;mo7jGv6O`N2j{Yhgo59 zalVh>Tsx|dEz65=N@a%hj~`qwD6p&dUamU_gFD7T^8S-WqlO=scR9xheSi+VR{1Qe zSahYnX%jIrPID|H*!9atAtRM-I(gXdk7US!K$wW*rK7Y}?~!~ZDz02mWXkGz3wE-p zO{0!LK{x~L+PvcC@H1ZNyyjOoLMS>Tn(PAdwH*2-oAue0v-wq(_%C0ML@1Qqa5Yxl z4Mgmn5IsD^r_p;9Cu-okYREFF2Vu7euVel=r+C5XbIfZvSE0EHO#{+dq(OQl4weaZ zG1(8k$%Q4(lQUMj-sfn?*Nj?Uy9{2k3+%wceyJE6zhD&Mx_etU_+?==L~xOJ{4z353{Y~elHBfj!vE4%L_C++s#i+$mB`tk)0FNIv2ZAQ@1YO^78 z-lu5m+$gVh_QP@lg!XdZGt^truLe%8kzb4Ccy3Sfkyz0iHR6|`q-8uvQ;5GBQ~x@j zZ;*5JBG|CabP>Q5-s~|~PA?$X1*DPGesHeY*%T7p?J~qoY?)OS8P~SyS6|+ovpl`E zsK;S>QSaZTYE%nGH*ab-m`cAP(s56yR+lT0ypS}0>Zguks}BrI<+*@%#T@0jb`e?q#1}LlE&zj(K>LMguoN7dqkKjj{&dhAA8m zg*AzEiaDD<|5^izuVhyCZ>hkS((@i(%VMyE`mw)9Uf%7WkGfql)d~n;msL=~K1on5 zaj0%DvShb%-Dwx5I|q#eD{O#FfSA$FC}OOR-(wI{j^Rvr^EQnuT5(z6woWuI1xlj( zqsvrEIypFu{qtT$vG68D1;migm9_UcVuxCZ=D9 zs`nT;Cb^=N!)mEB%)2Q$K?*Zf8n*epZ4$Hmgj4=YXw6-p-Rz~ksr`td7v?tau+{C{ zhqQ>6RDnU4c`J0=h_Lc4Sa)RDbgf#2gtj1X z-wV!1Kd1$m*XXAHrxB7z^ed&^>zm`IXGbweUDdDOSAvsQiy76B_%{6a5ZU76CZxn3 zk%xa=j9G8$g%WB0Jk#B?V#$4)K~T6SFki<`TwZ?=>m7&nWu1z6KMaHvMvLPl0p|sE zYu1t2KBW?^^Q^Jiv+z^iBO1Pggs|~X#QnYFQGy@y#|CsSp3ACxeTl744s$%(o4>Lh$sgsZ=g zzhRYrBTg%*!wr8QPScwP*P!l^Bv?Qym%E=mS&_+* zf9&L3$;+0*iVO}*1jtE}M@@>O6nogqBPM!*;b%~kC4fC|S7C~KL9Xl^5O#`kE#J(G z^>~>GcUHizRol20+{3?ubscL#Pr{UkVoXaN!>B(FO?(?+2_6&)Hyf^h)(x<|(6eI^8sC1&%#)Bt&x z>spn>*+=%%l*v)H+&Ly`M|mYAWdtN+_~7Ph-D^!|sN@ya@-lrfSa5~dBbNG_t&M=J zzdhLh^2BfdQkQTwEb-q00==Fd=0kZ$3PqB@SOxbeud+ z3E}Gf#2d6t;m|Tj*ru^g;ZdhMAz2l=dOxekmLkO z&(>}j?zo4}maxssNaWJ;cY@pUjuaG6)D#&0D0w{{vG% ztiN$8Yym()x+^OHfr7uT@#JD*#oEJm4ic3u&We+#30hVu4QgJ%_qyx)R!APml-i8* z4-0+UnF;;)OcM|crGt%1P!)j3sH6Ik5#YsII|j5b!CcY}Xnjl0ebG$Z4-q$JBctGX zTh_?OxC;;dax=*e%m4rX|NsBbq)#bgS=R;v2Og6aApXK2T5ukhRZpQL+Vlv#qWD`9 zEQ&MdPBud+p8ZPJjG(<4BtRs$qmv4W?655MS1V+*o01kPtcZ7N(XO9E&9hyJkJS(q z@x6?v#64>)%()!d=`>|jE%7qc1dzlVrA|`nNn7QuX4@U=gm{1Yo#sy~9)_CFmNNHa zc+GgxPRn6flh%t@;q92T+qBWv0pJd1E=8iAU)p`XzfsZXrv7B$(lbf{#eMhQO(SCV zT;=nv0nwq%@z_ zEj!al>MmL8)En|s@5Z;DZK$o${}uQ*TopOTK9~uh*&^*PDtj23`T&Sl@ijA~D1(h% zVHqvoS(vy+zv3sKOF(!tBEnq$CV2K$bPt(!Y{IdjV5u9+U|YJU1)kk;vOoe&PRcbq zytLIz5G>4!L-=U+HLi;4)Ubt`OaAx&|NsC0|LAnG2XDBvHX`sKIvq2Raq(9Yj@Ml& z%h43P8ioasX!wr{4ZH=oumB@&70pP=j4$2M#fDpXqok zj~aQFxA}5K3nG+VoXl7Fgm!AGoPt;p>j&FsWi$;SnNM4y`OvqVwdWJnhr$j9=+3za z^E|re5=Fd$v8*xbK!8s)SA`NZ{2?v^RLVXOjh6!D+~(C+;;elco1L<1dMcsSjwmPA z&4-6jUw;ARsR$54lB4H@+%zUiT>;G1Bk0bA~cOCiG4B&llZY_0DMar8Qsu=}@!X3kfVUbMKFZD(3X>S}H$X(5}d>0Xq+% z?KeFQvnGumRm9Y%opTK-lh2_H@JtUm@?9-D%U;#AzO8i(#AGS9cb6o7#XYEUz4lTC zc%u0$a1IeF^>Hlj9w%=JT-CpkiXCOr+|LsHPGM8+OydG~Axt1#nkpc%H^mbFIn>&O zoR#`_?}k!+ox796G4r4e!c(zaX-gv8>M3GBA8R}F<1Ju8d!}R}G$m&l2MHs;Zy+rL zk^)TKYBBuE_lwF%b6jgvNSEandr&B&{$r|=zB%xEv}8TKNZjywa-(ut=|RAiAOyuMQ-SgF zs$-~PXcYY#(#Gxs(H6kJKFR56jkGIrdTT-Klahsl40r=T^dC~XN&=wo%7#GSa$l^zW)F3xp`lSm0|3aL()0aAN2f+bl`vDpxLi}sBh*u&aV)F$=X zxNoaMC?5v41;+7Sl+aZg1`p}WTIg3YY*cszFH5Q)OPeM%`U!=W&Bubj8BEAd10V5! zEV?johD>{>9M&8hW`-mWiqa-u19M2Y0E?qA1FYg(4_9g z{PQN`m9{UEDK-k^;&IJ9TB$=)?psz7z9L^s*Bh*CZ4ot>oLW~Y;j_7z@SOnZ22op| zVzydT56EDq+DP{+8!2(jgZ!ptdl$LBYDxsvrg}s0IR6tc# zJpJgn3a6dzt}VaP<%*m{H^P`KI0>42xj#((z!p>od(vDLNK`mhLW6i#zs_iJa+MVO zq7SBh$SB$V${70>VGC~~rVmZhQdu9ZZL@4J!LKv7^gJk^b2EoGHGaE=KtuMv;$8b{ z)N+fh-g-f{a>Sgcv?Ep@Wr=1^N|%#`3!y@SQM|y?^og3j#BzR|@)Xk|Y+k{lHodR< zOiId>PS{akn?UbMb%o8Ig+iuBWO`>OF8@uTW0o0p3UGF4lC#>cTxe4MZF$mI56dnk zIpC~N03Zq4)UvYOZO4aAo=kKQFmNQA1P?1gk3~zzRo08>6s%5zV-u=;50eqKFd%I7 zTvx|k$|p9L=n)T*6Uq>IGIKFgLUh7T^pm0;U3J5Ms$u)!@7YNS8x@*K(_a?TlC>ZX zu=|)szv8$b%4awmq1Zj|Ch+T#;T1_jKV__yX-V+!txc1F-A;e{R#b-K#=JqDL!y5f zXsy?aJUuML(hQQu?PIWw6o0RciARcE{tzGQ_9>1hUcW!Ul!p&E29UU!L%HgB;r>8#Ae112 zN2lDKxr9KdYGhqlFVj!%gX53+LS)dcuQm@8E&D^&BLQ_7`%F%GCa&K0chPlc$D@*{ z^>0vl+pRPrEbNS}`Ri7-Zm3f5((Kp$bWCe8+}6VCQC9~?fD_b~0S1s@PQ0*)yQIz* z+cjI;=dRALfzG0s`3-DOiI7K~=iHAjjmJCSqQRWn7UkGQ>HvF&qn4-3TJ@g@T@SQjru zzW$=VDh{7QLEC-Db8GVhQin)18!=CH&pM?L*w=sgkq|oJNr<4A7Uo^5(^QB2;0V;> z3Rl+7`fGNbZNj05f=8Xvxc#al3L8n)32q2h(D|RxooWaQGTm+xws7NXd-y`DllCCp z_@*Ji<*K!Q^w)PlI=b1sH)`eR;tzm{wntEluV(%EcHO(`Lb({;URd7ubF29gB<*{h zN2`axX0gTiLi}n|Fzb$3t^fV3>Uh)YLMtf1%f6v=S+zj%!0=c8t`PRN+q3+cCcm_pcvN7b%|@slQA&w_I6L4P2d<^$*MHcznbRJl7NY+qs<@$# zi}6QGY3D83I3N#MLE9sFqxKY^#T-ZmJN_ZHHQ4__bJP^`L1!Kx@%_=thc`dzCMKBr z&5?;^l6O@XkBi`8G&|Fg9w*~@yc#dAW0YmqYNxP&Bt=x)Z{K_Kw^DLZeZnsW;|NLh z;qiy_j=*Nz;v%=sQlbyf8Ho!Z_!b%fiG$gvF(VrZ2MPg+U^D_vyIJ-Wf?K|8!(3Mf z>n5f%q`=V2mgXe8??B3Go~7}Yej+T9)v=)tjL@yR7H=uS1*y^4Xu$Ab(0)pY?)&s2 zTq1skCFja~$xkqa=}Z)_QA41Go4B5M(0QC6N&>=YuM-TKZO^Uj{TdVSAWo>%DR5+!@(u99<6}i&?-SK^(?8S$ts?J>oT7eX7)^{E4ehn+$`o+pm7{S@ z3#PcV3(xiE_ILn=J3Ne>s?3;q4gPbYh>Fe6RQ_pe2-;t7S4D;J_l>yEP(CaewiiBY zn`Y{%yBGnLDpXdEARf1P^L<44_>5Ty$#A6))CBaF*qUkj7~sF<-YxGZN5UuCF^ocJ zAxFFyW%Y;3Z)|k_og!=AK2Iq~gR^-y3G3QPSOBw6%(nr%TIg&@fJDeSo!cNvzzk58 zikf=@&2r|i+PH{=l~MWvMLRWzH&?Ym_vmyE+o%7>hti2eK7+Qd4t2e%bb?k^`xay z4^Qi0(;VF=97Ovjbn4)mVbSPS%&)`=y^rbql^f-~K;yIz@@hXnxv5EEISo>NfB9YR zX;yjs-$V`K+TIf$VTnA)>Nga(DI0`CF#OjpOh`2PwvN|!UiE=w$g^Loj!Yc3gjq`w}-i7vgy^vP&*xMy00Apps)dwc!Z z=^RhL3RA1Kp&6g!27$}kaIHv`9zR0p3(xR-s(+Y8r`!-3H7n=62LTCFU>O1>7AK;G%I zm$3nRt#U61#}(ik(;60MMh;MzY@RuO=34oBGXrbFO#T2#g|LDOE8yYd&c262IG*56 zx6MYd;^Ulx0~xlFY2Fm1MwmgDV*Q8$6?pvD(cWi;3nDyOF3IZ0(j!x{I~QTQEVA>78=jbnl=N&|6S}V89vU%0Gy8;@Ovpr$jX* zzej=WH1zwlg{Y+Nk$;pyAZ<`z^)rqsUm0-_spZD_QcX+5usr4H-kM(@W6Gh3!07fhT-g6xig$^ zwyowyYyQFpr&%!J+>ECr@DPycMBT+wNkmRpicgwQ6@w0C(XFML2ulroB{o!9NSU7v zkAoOj%!(O3YJuVDsz1aL%K)@L2mJlu9?y^#X#kqQ`2<8*y)rvTb3K71G{U(Coh=+g zQ;NW`R>=Sq8T2y6Ldt<@TEMzC&C*Z+L_FQ*Dwd^wnBFOf)OQr!V$RYSD!Z!a*^_`k zh&QhwY#-i|z#?7a+&CU(P}WiSFI7op@&uvzs(>1U+WXha#gN6otrsppH*TMGyCz;$ zYQmQsa?G_wm&-#FNR%ZW9QAok0>t+7LE_v=jiYZyr$t`5s~^koV5d%e$;~XZ6re!f z<;|5px0QLc_8O%4vVv*87LiQ}?fwp{PCHNQ0ciND3b0~@>e`K2Zm-9aa_thg(Xh}U z`nvAsUT)wJwD&1ok@>~0X=!IcKTD{YM%vl55Iv7Gncz$|%>ViDjj>#_8)PQDdx01jOh*g34RY1=^YM!vLADyH z5b?7N3rP=4LxxLuM-^*8SKPWaQr-&}C2f+%)fgr8;Qoq>^Mll>(bo3VU7fgsEMscv z8;ejWF^EAls(7afFBHIvpq8W|GJyexA}~H_L&Vi>gzu-c(6_`riGl0#F}!eiUX_iu z<@;`B!?&yBznPJb!AnyU- zEwXj-W7g&nycu|)DJn=MdUR7#SdgC~#^R$w3lQ3`2lhux9Z&93!VZ18+ts%-pMi?y zThwnA+Es5=APVqs?Q0!uT+{F4j5Yow!&7j;o}4t3ko=u++}<3LSDup(bKID-L)2WO zob4C*H1sli{`bM%9S3x5AI*&N@@bDAwm?#)S%J|3`(MoWqkGcR47{6SZnm304eBDLALst%~%%0m7 z>19jM_4BO@nA$k>KzSq*>5fxnP$J>_!U~>e>AFMhV!J#kqR}Ypd3|3*W{%Rpy;| zCCN??_S;y+mlziF$+4q{>+7Z9Ap&eB*%OQ1FMv8 za(h$f_M^iM^2AlLQ5WJ?~@CSFp|v*vG1 zG-F~jzxsUDK==FJ@GKX5MD_Kzs^r9`r|qPiiJ2eh3M8J4d7;)Wr8))jh%U*Bl*A-1%-1{@;Eq%dVu$v&Hg-Cs^f%Jb5<5Tx~>Tq28+VG4Nek@1e`eU7bTzQxE z>H2h#Ts^Er|2k7~(`^b661k_1HSBpN} z(Bk>5C*v%GiHvH(2$K|;$MsjHRk&+vn6^#ivt9 zF^pp3Jpl$BHb`~wt|GiJqb;twCt+{GD!BwQt(1++Nf&g5`&?(InyXJ3U2S>bb>YdS zX#8&7fbtD532o{CaxpN(8m9zd3Re1Z zHcygItvt$j%KW!X8*nQ@r75Y5I$-aDuk(q0{P-Uy`;&!ZelnB)-T)E>O3M8uB$tdG z`_!AiIe7u($+U$0G#5)~7Am&U4{Em~`q_P#8&6VW2HHc5W0)H`*ZU7qaGe{XIi1>e zAmPw81z=LD1A!+iv+7_Wi{*Q>!)(szllN>GKm3mOo!}{GR;mo|zJ8uF+%0f{h7bJd3`?!@(p9j5F5|F};R8Lf=^jxJ@b11d^= z0rz4B2qD6ihNm=SG9w8;R3)jq{k$P=DF}>YiO_OhkGxUvwE^`MOiZf}>&Jz9e^(RT zPwy}XSH?RH3<%8-r>DUzJwGHjlvydWjW`n))S*0+A zr%|E@xJl|vuppsdq#SMwp3&L9if@&mRXpI9;7Y^Pg8`T9G;9lMe0@ZdJAUkHGz^M9 zQ?>fng&i5{t)-U_%SsnY#Czl<8F!X5WjhOsWvf^QS>a}zY?)0aYESroz%*~~&dU~s> zFmL_d1Zmz<_nn1(=FipWJ)3Bu{*r*@Ds&6pR9~4Qvofpl$TGkFbC2F1Z6+JM%AZCd z+&vY5Czt|y6YSxHQq*ZwyIeCga;%1|iz9M1YK?B3F|gfLq|uRF@{k!(^+S_VwK) zdo#vNzCg79yY{S>94me07CyiL03;?7*5oBO_e&!qESkBRr$q}my`^@e`q@fe*k^ZQ z7*?qSsTs?R>EZ~LtVHrGP$Q+FC4?WvAZ(}qLNDWKItZ}5_7iPBjHw6lEjE>}x1d8w z56CLWARdG<^>jAzA}85-S<{O(kPyrgk=3 zH?f#<^KG1RTOn3#oQGtlX?q`&6916<>vB|^s(D}_891@3QO6YHzJSF+-)erN6-9`_ zmn|!su6S-_4ny&8@?TP}`lVtmK%)aO&>%{&s&Y@J?p=`l8jH+f;PXI`_hpa+vyM|* zjug7Lk(;P@t+nd(-X5dk?-jx%4>ba+t1?2@`l{GXagge~`uOOGqgPNl(JU>5i`7j7 zK?NFGj6pAxxw!SS{VzrP;VU^(j-YmQ0VZK_YqofJ;E z3mxlWfu(aO_l9t#$!4zHl76jK#XEn}w`!=L;}v#a$MaQdQ;_dAf)LV`&A^SLnWK`t zmlF}^s1O}S00MFo>hP9zRmrQ`@`;rZWSTP-V%l3+)1|YgpPol4egjO;jJlP~auEqy zepP*gB8Ci6EEWUaj2BY`s#HRNFbnLu4!-FmMUe^oxQ+VX8If!7;c=9wwQ%0rEr)g3 zY_2fW0B9%E`9^A@$@vB1P9fvJ_F`X7$?9I3oUHNLPh*-TJK9zgy``OB0@&26fWkI` zc}iy*m%DF0zrM>Ue2vGpn8Bzm>Pns!CB+QI`@AP#XNR|v-d;w8iI;{?@~nhTaldB9 zjrIQj;o)t!v3p}&;`rDva2AS6s=a}`f_F~RI!+|I$)0Gq_za&4d!vYdo0qAkRMxFd z)7>Q6BCa3tg=31m=Zqy23;8aIInC5f{y{{Ekqb-qM zl!<0;>kT%Uld!+fl6Bf_Byp1J^l%0b` zwHnOHT_7JeG&)O;pxO;il|$AiSLT0)2+ku1+HEcUsV+NxTeY-kt>>vcmO&{mQ1u9XIJgu>OJ+XcAbkMNKlTKA7ctZPk>nQ zG+&Q7fZ6FVYDR)hIWZWRrTcfcY{&)`|Bkfsy=gdz$k3nl^2_HchX zwonlU762cFR`>vp-3Aw-!LnG17sZwhiTQC!*_a}7dBnw3HlI{e!g;ZTkj}65_;!Qb zk2YV$3@DTf6Wvgeh#qKfQRkJ8$RV?i{zK!~_P)Iq-*DjZfs2M&JIfBsnHa2Ee&>LF z1=_=(d`o`O^d9H%e@p$9%Is$W1Y+BX7|x4~f>Sk7h;h^)u3KwgJ(e|p0pkIwwv4fu z(>Kn$?2C^d<6oG5JZ&0Ltt2XOujX@r^PQ}(-HUcz*e zxwGf$4*;#;t^c6RhMv3zMh8+GI{H^qp%56<23=`qz^TuhTtb~6(7Zs9bbwc8_=^Xi ztVafnGU+`)vGJu^eWru5x^rNJnc~hKhC6d~;zKAkb005~76-_MX?@_shO&_^9S#K4U z&i#9BzlPW4bRo(`E@Vv&T%G)wt(6^cy}|@VREm$#H0=M=8bP|ER>o^h&6kxGpj9Cx z81NOa{Uqyh&*_10i0Ul}D6j725%uCuoj$2v)(kCnt<4_67kr=Re+{IYgzT8L1gl;r z)_Wo^cl^|SvJQPb4nA!fFuvop!K#^UUet2o_QFWiejVda9<0);j9{tJtzPGk{wjL zr01K&ESCg;Y(9rRX=&zSQC;{ZTbHr4wFX?UY}tc;{f?8B;8ecv*|+OFMRqG& z6gk~^t!#!&uG2DRJ=&Y)T=aVAx-h#nhIG^N_%0{^mzuE`EBuwoW zyH4iP(Lk9N7Q-P^$C5Rhw8@NL*@q@jQ_Q%6XOeobNC7(@tFEp z6`OZd>4kK3B&9B~6_iz_W|vMy*#QOi!9i%^mA0WOfghUIF4pwHP?2$VXrQejyMVgB8lUYWJHU*#-aE2^U+Vx!#`3 z0+-=fn0)ZboXu)P?$TA|dL89z*Wt((L~S{_Q6&qb!M#BVwXl1Bq#K+$$bxu+BYv_F zliy70aYmi7BZ}^k`&9YoF5zg;(nqR zKzW|KDWhAPvd;=?_U0;OS&gmp__3L*0sC}X%Ua73KJtia-NGziDzS|g;r1~GmV;UI zQ{l%3^`BJ@W0n}{M|VO?*$!w_0qHY=f4yge#aJ2pj}WVjnEfvgd0~=!fBQq<<9Vr? z7;AewBR?<^KVkZdmhMk!$Es=mc<#9?%*V$lmn)RRt6EST8$-H`6oKx&VyaxT_}Mfd zXmvoT&N=nqfE~t5 zPqmK5usqr87e%eFnb<;bF$XSA&R4t1H<4m?E^n}{3JF4x9Hw40L`T0#7gAd0mg(5D z4#VT>yt{|5lZxukv1a<1zfJafBzg4$jAfa1hgU%HB{<#LBO@D#VjTn?Y10lv@u6gf z7#8neyvt+lXwd^kbH|c+J?t}l41%n5tKamqqVJK=_;L4n(;pTJ5r%7_#@ z1NM=OCvxJ`d{725C5ZpoSm>W1b85;j*QagaXHGYJ4GQu`EW}a84a=<&Rji=vfjMnc zC|NgLNLlYs_ap@u4QG#`STepsD!1MS=uZ{utd2pX>y#=fkrH?*if43hj!NLY9jtF8 z>As)bXXM@u-E^2s*)G!{QQ_$lnwH(*$w2iY#V@`+S!zJNO#%);Fg>VVDhS2Ju*Dgj z!Pf;1nA2**fjh*oT&P+)@>h<({=t1$k zZ&i=YTZaF^h@2xogu_qLh^<~ay-jG^Zg8 zPkdEP=^YAv~-nSH;dMlv9I$qxzfLoiQHo9oe7 zt<5bh@+?`MqxZ3{%9&Aj3w9f50iSjNBn3YwWIqhe9(!^+Jrpa)79l7iCWg*By`i8HE1xq^*2zD(BJY(*2ICvpl6+Lp~SdH)`L(S4>0t;wHFO{_3^Sk z_-`G^78x$M$~?v)Z=8xq{^z|bECs_it$x1equYh28Geq)U*5OMqaDjBLC#}D?bvx* z(Bf>xr$t^z1^04F_<#u;=8jo<_6wM|zuD(lu@RP3UL!!UJwb0%rcD zo>p^sG7rf#!SzXqNEO$V??KsD253p682l}57uiu>7YJURoKL{LHHX@9T97*E4_$DH zTpfQ_FycpGZ$f&|Me(rnY)%nGUFI*}hNk%+v`pR0 z6LQulo|#9cXeHD%QHwOzV>gKbxfTelS}YiMkP&d^f0Yq$8~V~@m;q=WXqouJ4!;&|8x?x@>R?t&te!&N0WhF>j2IG91^XmL*c(Gzm0abrn6$SQV_!(-~ZNZpR@WAQzhkzmG?N8x|HHho6_Uep4Z3%~SUCaVT;p%2P-(yzBU>ZXSm$Wthkc*Y};Qzim%3pfQ; zR&WbBDSY|T)spYOvw{cqWd9A$$}1^(kR(iCO+~R&&R5eh@zjw0Ilwbt^GHdQTla!6 z!u(Q5UxBGNsd!Y+ZLg5Q{xW4MlzfM%bg#pUePdr7k?Zlv{5R_?pz*p|wQ=a~GMVwm ziWB-W*ZC#7hnAgRhWq3Vfwg<+Kmg||hF{JRSxh(K0b%C6vb+XS2l{Aqh9NUp7}s$K z9|;yRNrUDg3Hai8cf)?ka-iM9kae0(Pd`~vPGvW8nW+*R%6S;1%|drrXNL%MS@RSq z2(aakDq-#bc(?T9qLMj)r(A;w&{!EBKE5d83~2qs^$ zgi-F(93#--&zSl-3@-!LNrv7baHvki3$2vvDp=zFz5S327v#EaVLyjRN8gT;dw94M zLr>cAdLo$xg4u$(?fmMB#Nlr5?LA>T5g|C4>AK*zD}J99J_H;oaVJ(}>9F9R1}MI^ zet0aREjp?~h}>A-j1&GM9%ViSZypc@CNb}WQ9$_*sK=r*ZRMT>VoA@1VnQtp0N_^P zBTvKQ!|`TZ^F@nhQGX}3G%v-ZO}s2*EZfY;FEfPDWlTo+>n(s@(u^O0%FxGapE}jb zY=jPObZ+VZ6hQ8qV-k}S%t{!ntd)ae4*Hh!xP?KibxL9GHxCr|qU{O|7f8v!c8J%# z4?+53}-zf$R`^VewZqOZhP~0|-lLLvbGXHZif=4Mjm86md2EhTjJc`^g*z_34Uxkh)UV;Qf&$Os?@D zevCQ@Xa>@rVqR_dg5IP^&8|Lulo#}(T*8>A^_|_7Ufo_I$f(Gkfq>;=OSWPx)UbZ! zz*kaq{d{TFp`k*$%GSTdrY%JhLGB8@$Pb75R#3bWf&){G$qI*?o}2Cv&HI01GVR2Q zm33c+zw8mP)v^^PkxD8av&~(IwFcy#+d;oW`cI$pWQ0=qtGXu@U474-=t0-4GYAAZ zlxcNU0K>L&j$y0fDi)U2>lal1V`npmk0S3Ztk#gokqUX0uFls{KCZ+1J^Yq^26C() zCGmhRu4RsQ!40)Y=)>2V!!k;L)Nq(&7aLxLN?HIua9UNeGzWg8o{{a|6Nm@`Doi-t z2t@&Qgd$^GIgzbZRZ-!aAn@8H@DJ#b>VVyI<6c<5$7HYhbiA z>D%_Fx{YHoB#)Kh+`EM(!em{n@&yu*FOfC8wH>g0!bt{!K+GbUOlmvXeAS8VD{sB% z++$a=T|FZjkxmDShqk0$s#Y(a@b(X(z0eackOCiBOe`UK#onWs4dB@WnR&`HMi4;3bXIVHy_G>e;2&qc!F8WlWTZv zmC4Ss0(R$+MJUr_IBT!VIiXip@*25A-l3U^VCmlsCdRQW%YE{dSz@QS!M=gs3wkg@ z+AS*xF|$5M9NS34YzKx*|6s!fG}xEk0FZ6R*AiA$M?L%rRUVl zS?I9n41wo(kzYw=e|ZbuPs5uRk#-M#;v=9j@m%Wx?c>p0HTf4AVK|1_gAv0*4*)D9 zlbX@_8@F+z8bs^1u|T1$ollWy4dM^I1kg3R(gHN4isg%kCWx`GOuPX?JiTLI^!np8 zPVTrodYwj1a|>DW7$Az|3P@Sh{?iS#C~$DV*jQH%cV`ts?2yj8&4JNH7rOimlC()@ zI!DGZPu?y@E+Ge~Wx3@x*?srUKmY?s9jsGO9Hn7zR=3szRs0=B_GS7OfqUfB4`JI?dv^mj7yG>@+PgUt7at%^q6{U>kHy4=it(a4Z z3ML(;0LC&{5rC#Jvq!{1cs=&=(14IlNa2n~{WGuL%?yBMNd-~h&B z^@1U$;Etu)MLadtfo-!Om)v02poNK1Z25NZ%dESAEA5(cHYk=asJF*nc=z}68wRcW zo;z9^;YlZII~1reQo6|IpraB2{T;`v1kD{@;A5B(xn~lb;J~FO7Z3+SA6;D~TwbOk zq-D^3==;WbWSAlhA5T-A!yo71uqFZj|0mb4D4)yR)p!?FopyeuMGi*JTE*kaRCShzW#cCEFHiMf=N}E-Gplup|F?Dq{ zk~SjEVt~?##q<`>HYf!g*5^BJOU~Ig{r@kCyrqQsb*O|cTp!qySyFZmXEm4Xr+doR zWj8_Wzy)IIPeZ}`slTgj#+bTi#y5E7aD-n#xnA0+D+9fG>oV2;l)6xBJnb>W-Xr*0 zj6`1?uI(L;u*b}nJ9#0)*JO{etPn%Y3DqtjsvkDU))6n|ju@!VB|>`otgMfIBT3I& z`|o711d5G2CpN*DXx#^q%V;f{TCW>5l;zVQZPW)Pj^jl2_h%hMI2HG?BEq+9X3A== z{*@cqMuzlKkbD`i|EA1*NH-M}`?@0tAU$#5tZF{{&L*CD9Eva)X*6T9!~}j#lb)Dq)#VE;RDE!qqCS~m zJ#nlTX83$}pBV^3i7K%Kj?N5CksfQMEW#ps8(tuX-6dDJD!B`BycUg(H=*=R(g3rm z*!pSh>dZh$c&C%vQGdbQJy`)(1!7TJ?(>tw`mIeh^EyYggO{T9Y4HKOXS!GQA~<`L zf2%^QG7M!p12ER`8kZW&IalvO#}jxh3xi;xT0T~|F#<=>jhSC|bN#y2duTPAbOMH7 zGOzNX96KX97`d2e?-R^Ie{(QarlhUX6TwY3}t3s%^% z!SK+-M>lqJ7-#zd&$ZL9WvV+k1dc51Jyw1FvvhY1kVMv-oEon$fV6Vio)#=l^NSC6 zc|Y|x9gJLX|5fsf$GF-sul&EKH=O8i z80-rEKAvD1_FkCZFw{bk$ADE;RaI40RaI3uz9`9Xt&-sjGi7^*bVGUu9a-p`5nB)1 z9UamS{wr!FyL>*kC{P3**1wN6Cbir0Y$2v=#pkO}OZCCvJGv=N{Idwwao5~S4xzIw z0~}DS?0)bMt@;Qcf(RgmqN=K@m$uJ!8whLM!fzsM^MkBZ%y2m&-UX3!u+JR~d2T6ztHZ49!~x_PNO5YQ%?d;FWSfXMcz5gX zGoWXj@O5A~A*y?0X2<_=i8UzxsIy0W*9pXrbRF70aaC1dq8+H zY0PsL?^r(dcyn2O!R&r!;=L_fVOeOTW5u@mZR+*f1O7k5G;y*xOk>{w;!COj0TztA0^|2RA4>3PwrOr zzI{40OP08driXqz4e_OZr}8_*f{sBo+e0>^!^6XZLfGJUfFmhvu1g%l%-(_zuf?jS z^2D4&y)X`Q2qe*Fk#o7YA|Jap}*A1(1M6XUQqR#S{8@H2=>Hz+<>S ztn;9XdF>`Ngy0aYX*cRK8^H}=^Xj%BYXhD=$-RN+TOM~@#6?TC+ZGeGQxqh<9B~up z^)ke`b1p<4a={UL^f-B29ZEy?Vd(SS=ZL}!u^EM2-^SXSdfchC;#c~u!24~~SWvj* zF~MBkHo@{$AOQhj<1lX%;j_k;EBp%f(JtHu6_9eov}X=)*&B5XAwuYAo&s2sjOSI07^=>NIIujD~o zjs+OJG`n760 z7TSG!iM+sWdxfsoFm!Co5mx9jr}NMmNJy~YtCToOB+po_Q>XKU2S%tD!PB(Es>oHNlHEtYtBsOjztW&zyXRav)(vkfaYCJ zo7()X<6#zC9SjhXW)!yl0wW47DTsSoo+tEw(D<|bn322_)6)acA{?ZF!burG}tq!vOK<5_Y9{vj`a^b%sK$+`Rw`<7Iq+do%x#0lH% z^6P%1Nh8U;^$3(>@G>=Ni@PdGQj|NQ$R5Cru0h}E?5A%{WUA@><_*Q%9LV<*J3C!B zx9pX49T_6xp{OsQG@O$@aj!O$PKSi%Q6`NPIL~cmTk}I6x58ppPMJLaW+h4Tw*muh zK8ux=hjCyXd~B%`w%<1#uU@e;GzrFn8(c4j>kVvDF!1D*9sZBqAwp17_4keSZumo( zHJjH2!mj)!Un@^uB3hQ24;~6j#H5`4*Iup_2~8j`ujaLM0MI;#oji)DKn@Nk7daam#yqXFfdld#D<1oUg zuHWak(=`it6`?{_UpgN*73Y`4^zG=vg*q@AoA{EPM5n_$(d@3Nbrk#LLdLg;=c=1x zwVj|}B=J8!lfDBi=0@ikxCj%5>X32d;ka#}h4wt{OBcl+XLVu2If^ z$%4K^?FV}ec)4Iw~(7zN%&a z7*hT${sfmRErBLKhQ18M<#~19pf(1u)(mArt|(JD{kQJ5NEsq1%qpi7cEZL0=0z1v zUfg1Ar&S*?<`5k%9@9>X>R+FOR)B>S7!f0-xN% zvte`Im0A$I6GwOD<37>U+o$C*u`>^@ara3IhYYb{kf=f;7&PJM4RNC~`=z%-(nW%!=Vo-d#*(*|^T|9Fahu^DW-0aP2~jw1hSxO8fFz3J-Fjv+29 zKrv3C*;rZM!d-5n3L|PZq{@)_Ui=U(5ynzIHdls#yP&lkKmnvCTiG1UI5OGqK=1iG zxEC41KHR?{$>k3xBz+Rp;Eo#98AKGjb@|zK$8>7eq2x>N(r}gCNxKO7yG3_~@p@nl z3sDmP&;up%Uf&c(w)$rYu~6_z6A(%o4@vM)q0+oxJtpI3orrF7SJi(P(W*}Jh05v z+Xje^t#rrPl<T;5~-u?a$56S~CVIchCix1Y1C`^*o^D z?VBghP9KOuA!{h^j#!6jv3qLYVE~e)OSy+l6!0T!71uaZ#U^IVVzQ8EbZvw_9qF|7 zOql0KFS-@+mZrGBl7x*K9-x{x0>=yJ)o^K9oyt9q`*cWUS)hY-qRbU>cIqavNu2zS zT~y@SBk_YBLayM3r`cZHiAtw`)CmpCA))1XU`t{7PA5kwst2nZYWJjZkoR!6(_WS2b*osGzM~{eneRREP}@QkHJn#F zKI!{EEkdy12Z7hP|1#EaMt2kKbwRKRswCngY9+imro7lQ@{R2bYeM z;8UF_)4f*}KXg(OVJ0|ITGsK9ZPJdK*~O4}9RF;2?T+5zB^t^8lqp(0Q>w&4!9=d! z7vKou#pm^uh2)2p$x@;O!Hp&`e1U519tTb$^`!%N4`J|y;=(F~*{6#)Lmx3J7DETk zvo=C%?Po0La!qn-)$uGTS`X{gvL9t4HlHu`ACVD|@Fw}O1B6!LWrlN=eJzdxguth? z6lq>@29*WnnO}*lp?O2DRGFzIb?+V^^E|#g#BYa*+~}{Ht8i71k|(9RFE;|jTbp-k zPF;Rz;IW-SU0}B#ywR~P%NKh*q!vqLsU7Mbr&$n4b})il!$Sp;9jk!m$DnJ6-?0su zUvtx@u~EiA6z5FC*~EdgY|eP%!0~fC&{e*_CQ|{GoEY)bKC7{8E1LCMUdGa1gRcYk zlQm{Px`CF=5yA(kb%VUsO4 z$5IRC&5QWX?@jze!s_n zAY{;-)U6B&KuzA_d|r6l&0WZVUvO0IVXZNfU%QkwVyyjBWK^TMPXaH6d7Fw+Mb44n zi-oGk^himd*X;C1E&Sg(4th1A0(fX|pPtSeWNrm{SBKWU;Mx0Am*>eJ)G-9r<_&&~ zAx{Pn>I8taF5!O-Hr)#1 z`xC0)iEl39_U}nS9a4pLafcCtrTh{@&pow1)Un$E+nKdH2+bIDT^ABnS50~CKxHiC zo0=ek3YoLvi_LO~8;87nqc_+YV1zW)M(YNXrSmh3un*Iex(XwLFt~G_ z!r2p==w2;FG2#eu`@pQK0@UG%E2PIO04z+4??9pVw?7Ah)I+y+K|;%EC1%Le{a7M2 z5Bk0MqV}yNI1wKK1AD_*;_WHhXmHO{tNVkGg62mcj$~rp5kK^a=M{LwFm^)A8$#)3 zzU@vkA*(8OhhXB!o7+XR+?y32kp?E;#Q>Jrh(qBq?3fk5nnSQI1o(pUsNX;gS$>Y6 zq=i1h$7$PVrdwebM zJsa|`3dE&9*_sXeW=8eRH7z?ez0M*)h9+L|juz~f%`9=TQB{{_Jah_w1M%qj}=Tnjp!@NCtDx3w=6B_?s zME;ii^=donEVY3Z;m+6_VL$l@hVVr`PwWpX;i1A3P;iGG-S6baODb2O!xv#Z+nfbXvw7OgKZ>cGqxmjml^&pPU+yz86$k-qTi>712udHUenbJ_t1mMMgEIGt<7c+)AI1B zp@J9c2|;V$V~*K3ThZ4nY`X<0=1(|eG>fX~N!XE-QOtVccXetsw#w(FS!0;{FD_Jf z)zC}ranx;Y$KtpoQs`aCa1PZO5W34 zhw{RB06v_FkYR5=gjaS@9DIHyCxLKWUXNgXS(N%j^pRKnCfZ}rAYPU+7W{uUhx72n zcxaT{*J+hnHMET@z-5)vpZA`3%v{crgS#k?e}?q)JrxH|n>K;F#7SG?>X-sW1VmpV z#%7#R^h8jgx691z`5Dx&!_RAs#Sq*7dY4@5VRBC`wJ7*YLO>orHW)we7*d=xSO;X^ zcvmRAXmKvz!8;ds{rdo<820w4(I~iFbvbhRno~TLLina^?V^O9yes^}1Z7L3cyhw53mEh07&zFX<21N5&^{Yk)azhSZ2hk_z4a}o4Q`tj%< zSry^>cPwz&?&%*gtZB*xrVQ26r)y^HeMc`9(2;>loVL(ExD%N0lr=DygcKG?+4sks zTdq;zkz>`Bc^`r;V^PS};xNEE&gbvJ=QoD#P3QDD*m+qzcW4`hF$r_&|`BO z98w)XC6s+lO6(KlD4j6!`xVwK>UnWDR5)t>wv({^4sM4O!yZi? z##f_Ez+&Xt@trsQPr_xPo9hK+ZF$pemI?OE5-Uo?62@}yCir(vx>ZJlRxNxIC?Uy`bfU!Go%+rWPr%Ld}N~R4i z+ia+_K^VrYcA*%q&47!v?j4-EHj_%|_{Qx9Kx|B;&KOgldRp6P6rh(Tr!wMvaNjWw z2)74^lj6Qi04{e*fXQ9!nX6AS0nwq8@<|DYyPAQArU*|4CF_vGCOUpoE`|3R<6;nb z5XIQ|6DQIwMTSizc|%omlBWvNXPk6PSe&=0;171ecXHU%?644cMgUXzD1}TIO4Do$ zSml@eIn?6gH!ruoTIIAu)T~iXh4ap#)JLknKK{i@jFli5POBqP*gc~byPu+vgwOryU6^!|;Rhp6YKdo?M0UY6+|gd~|LX9N1i}C`4Fg%| z-ZNHxT0y5UilFwP(6}DRy<*`1{m-|U-Y|#etO%zfZ!;9Au=*X>KSnYp%$2DIMB`HJ zOxAZ8c(7j6ko&U|kDs|_z2!f9Ggp`hTnu1!;T-Q#&a%m(xlrpp{QTPY=eiU#7~+q^ zr6z+YkplcAR|X~0naO3&eSPG3;GsK(g%n)cK9m6C`GZzAphah`DptzmBQMgx!D7nP z4^Z#$t3A@gVmEY-Rwfdyucam7=6#zmD+)e(2pFuj_Z!QFAd-`NM`!b*l!yd>I;cwH zjFTSg=3{SOn!Xm=Sse$8PYvR)GKF9%iOyNx1}kG^F`BP%b|J>y?!WzIn-*oYp#wVg z9mB?I7?2m++L+~c*^yOga@H=^Okmp>=^wlh?z6QyMJ#4!3A6v zO^skk$1bN$J;YrI6#-M#867y@(N^6mN^XSSf?G_ctE@7VpuSeTvPnLHmuB%`PHiY+ zMC}{j$jO{_&!G5wB)3UmF55ZY|H9k5Ua>>O`cR~3nS7B7l8;)eDf)f=XB9szzx-`x z@jFWxQ5i>bI-0%M%ZlF{bwZXa)8_%H=Q3}MBMuKO$Ha+^lP1*sf{Z9My-9uV_p)t% z1uH{e#GQe;%2h44iBc|w12*clm)>phZG3@ zJ2BtFa2@_u#55CckhH9++YxY1QMcDIji*|Ake+oAE_03cZC0BxpJrAu?cmPdk{a0e z*O(1U%@MYvYlfG+M$jmBko~4tz3zqyUT3A@5ekQ+e~UyEoML8%n)=+&ufCybHL?<# z)?l-`-c#WW913z}kj=$s!;9&2fkVg@xyl{+8zU$4yGgIhgWsI3R8y5zV?RZmLRmE6 zz;R6RzIr+lwLzcQ5X&D~z@#M;izRDjC|VEAypspbEOvjr(NqU(q&;kJS)9$sv0?Ov z6Rw16C*bj?oCaqS=NaVF-5-a*#qPeznVePwc4?Pa!(kCu#BN7L?`}h+(dVr%LAud( zrmlSG)R)DSnXb9M^B7jY5^%!>nc=Nt!s)>N@%P=_Du7&j!=P3n`5Ckd+f8Ln8eS+~ zoejbKZ(YaMj}H$sp)y(l^9Z%Airw${wcv5%#fDKs+xteP6*{MqedR@3c9?9dYc>?3 znZ;Mc^h%^8f@-dL6Yps`F!I3;Y`qKyzAME*CCITG%7o7mA(=wNfZv6_^~{Sjb8*au z>V<5fidO#Z5KC@$hbJ2QOL&Gw-guY#JO&b{G#>kIekj{y5hzMQsAb#r_evPDB@J2? zl|^zuVo10bPY|vLh;fd7*7o*GE;_Uf03|2i(sVt?4i|-ts(5HNK`juQoiY*ix@O{s zIQ^7s@|X!*+*HJ^M^RHYY1B99tsb-be!sa@=wAdI8%O~FF#(DMu7X_#y6m2fJeJ#h zecA~dE(-_64_7*C8R##q7a=a6)|%@?!P$WR%bok1rvu{}F?t4q%?Rzd=7du|Vjx83 zE`l4cEE(KJ9`UC5h>=iyXdWB=#?CTX_m2sP7wA)X@X!%s#u;+!vzqUL6%tfca_JrC z^Od8zYTes>enc@2hQr4c+3WiNfxQqCX6$qiNqp2nio)%NBs(jKnaCoW13ek~l0A?y~GL(R?-f)7ZlmW*?b3m6n zr1?SHdtxS@|BF+dmSu&Tr-u7ZEWeA+Z)Xq3?ix^1I{-Ao}=O+ps8GUb6fXm^q9yM088L z2pD|-ZE|JYX&%X#D4{G)mqq_Vls~XXH)!|-Kqr43WKM0t40Zh)`Gj%-B8!H-#>P%t zxV-w}Nrh`f;=#B8veCdnh(@#&N6RJ+x+llDyZbj zU0^AVkz{6;4dq{ktoT{b9QtUos>?#{c{>a#+1(4vRKgg(16%4$i~Iwx-F9aZ9bK!T zUo%mont)U)>(IRlr$}e1IO~cQmwYYca5+_m!<)57Dr(s(ENS1v=}`d&Ie3^N39aH4mN=5dei92&qW@n~IQ8dna`ai>6GzTufQkn%YPm3t~{ zai_F&0JV}j;ixpQs8e=o4SkIg)o2J`A?tMX@8qX~$#(>D* zd=7nQ6*VQE&FkFLm3SjfE^h5M$S=qdVtEoZoA4mp*d(*oLZ&! z0A@yT>QzggCfqwmEuG^doy6R|2~CSlWndu?gmVxPB@ugf?k6m+!BBTp_Q)Wn1}p?+ntUvBHI)5GFkVxw|M*`rlM1?#cA z^}}_4bQ47dKsbT70*>&81O#_i3)BM8M4&lA(v-4`w`rO6ZrLWbB@`+C$W7-k<#&J$ z_!7y0^j|$-8u{wf%8*3AX5wBc7OATmt#4kT)@weKhNe~^a7fVFtzFW+x9@9qz( z4gAm@r;)d?P>2`|qtGU_8~fQ~6JOqWmge4e)1PulymzR|pAZ7DDRcH|VnhUhrTPK$ ztTY|;T|kzHJ;axf9Fb{Z-{z?#ZQsHDv@XM^WS+`(zkw_n3bX%!3z@ zWv(}l)_NeLp+qIm)Pkr`o{xk8{bIo~qJiTj0!yFl&pz3zmW#PGRsg3dgT=et0$G6P zL-&&9-mz|e=V|?#%eQE*Ud-NxNtHQtMv|DQyC;EGeMX8L=-1ELVSj29M|bMSI&jSFWCMUI z0CB5{S89Dmw&;7@MzL-a)vZF@2oqH3!L2ycuzPzRb&#!i(q<&EYs!oKP1w=#y`yQh zXU5$Y*<^+JgEzx!+O#^iR59OD6}6Uo89UWZT3=BMxr1s~=S5XQrt#Wgj1J zhG!<6|MzM$QW(rGJ#Lb2*qoG@V1}eL#mBraB)fuR04ib3 zc;V??lxO?NSrASAGlPf*7G^zQkLU{mB~xuc)admdjV!G z!s69<4h50FpFPJ-UZf{2`js?HZ}m!GQ095DAzoJ_yydeX?8b(nogkEMx?aC+0W%{o z=A|kHpsnUJxD zTB?6FLCX2O3i%B!{KNVnqe7XF4K^ABPj!Dt{`4wk;vxY^hb#G=4|Pvlyqo#vE$3oR^IfjP zpF;r$P)1r%v;D}9+m50CM;XqONYMPR`aD4YuS*xrEKO>gYP!a1-x6VQu?&B$>n9h}LV;DgRo^P$ zmUh@(xz!f462}7Ya0hf816>a3l1umRslEla1@1iz@SaOT9mWCC+*2PoqnYT?%IWfE zxkQDQ1^_HIRLrJ5_uEdxPCFOZ7Y+)3o2bkL0OyW2S3<(s^v2ZbVQEMLAk?UV7XpIwhGv~HFi^oaj_8b{)z3-M`07zoT@U`CkQZIVFLE{tk!%aVxMTqfllr3s<*PDw{i>g=`cy_JX6)MMZ^RlXDayroKD>nJy~j z1D7ezkOR>m>e88_9ThLvikoWCJSRk-EWJ=-sgqO4i1vD-t{e@UUnaS-INFjmtKOE9 zeF2!xa!3;**7oxf`hVn~=7CIKx#k=?hDD7^Yut|=)c&yA?#jpJp=c4{wVI0V&?_j^ zP6VFcw{_E4N|;R1T$W=6U7vg4b=NFp-FIjl&p3Uc*ZtpRU6oPJ`o^uKdaf0yy>G@~ zm*G9V(DS)N7%{0Vq?;Fh_1ZCim*t4?d3^DiUd!eIgb8EY;xr_UM*uW0N3~|Co2{eB z%UelXaFvJ4Czt|c%P}=MUo`f!?XBqj9}--GyHtmue5q zP8WYIviP<3r?zv7T(!^L7{A=R5`20P`{OETrC<|nq~e&U*ciA=B@zgJQ0c%gM4Sr) zsEMdd!j*G$&OLPRp}#T;OtUeYE>NBKmxI)hP@MWkTiThL;CEzC3=A(D@?yVmNiwK1jbGKzD>Lw6T}otcUOb3r|)9bPeR6U^0p807Wn)X(JqOk>b~B%tgrKy ztwDnMHL6on{*u^66eW%3tqy5?*<_raHJX}hLBbL`Qe$6&iYDd1)KqCUpotVr0Ef=# z@#ZA31u9j^s`Vj@nrhGz+Opkq()2KBQ;u`D znHeQ?&KHb8SfMweC6nXJ(o%?Zmq&SjCsx@u7QXSKM@?en8K;F7arvTh#>=(0$+esL z0=65WkE%zk0`!Mw&c=>n!i7v8b5$UG9xONaeojbEfXHPT4PM=WAH<60v|ee2U&F!J z=Sq*qXcD(&ovHccU9t|jiG6ICol%w&*{<>Ev(%Y?^&0DeY6zV-CS0l{zvTYMt-h} z?2W0OB333A{9jvqliWg>tp4=@_#%`h{Y!zA8w6})}WH;Qj!%;_N&6U$#^A zR6?{6rNOK|<%EtNO^0$n$4G}bAO>EzkV|-C&$v{EnDw6Pknhnuas2y{H`AM2-c{%e zwrPDop;=>2g8U>X2(gO=Mv=kd7v(2p$la9y&cx;RM9jP27L%6sapArwiT+M^)y(i#8havvhfYwK7k@<%cV+BhiggpoV}GL*y9<*#5U+!5}1Dy zFw{TiUd_u*L6VTl75l3T;2&~q7u0kIg$zBhC8zHZO<6+fOsOT~1T$~~>0VdKZDg)(^lk(`JA^Vv6muj8;R zgYB>|en9n<;PgDGPQN&W`t>nS_2AXvxf%q;0yI86m#d|z?z78ov_u|>UrQn>4jHuK zR*2jM9mz1Az@3wLrv|WO4rgX#b;bsquG2>erJ|QYCD&{z8bw%JYNtQ?ODX0Gb$oqh1chK9B5ZiAW@f+) zc|zX#xQmzxQk+*l3Mb1q5)9<3!@I*^d{l%5HAwo&V*8MlIy$1qlrn2gc@d(2awZwBmWM8U zshWjxiz9;?#bCmp`S0ftW5Zt zYAw0Rq7Kl#eg{7Gs?AeWzP?k}w}`zQKHzdh)mYJfQ)~Z2FTU%KBEJDTQM$x!RF1p7 z5`Sjbk`wqd7{W0mw>)~KifbmRYj+!2BPne24OHUzw!dyF%{;ZQ07p!vRKTg8Uzunk zddFcN+BjpOkicY)c?v7YH2nX-9Pv}b*#RUXFIZW*wZ!l8a z$o9sk-$>22rVQ(Gi40xft7I<~*JbLBLd)7c>-U@@%z6$fIKR1-uY)(tTQK!CDR-NYq6Na&%&r5z8wMgM)q}qN+I&= z`xJBiiW!Hof&TOya(m_|CV=3S!MjmnYJqt!$AXs>SBZAz+dJkB?Hkp}Soro2VYF9G zuVh78=p#I~9O!Qu?{dvxAXt`8uYDg-kV8>3t9a=OFwhXn=8Vn=230p5$nqkk7m4MB z3%C3GW?p|(I|=!YZi0g4S>y!s#er5auhQPT^jZQX&hP|_qhnDj`=kohnut@yT)C#& zu&t!I+8;PGos6{SAIr_mC6J&^gs(e69n${0I#~P61 zjwT8m5tsC0@xy>wQxPU@e>rav%;91!Vzfwk*U?@&O+CQzkEzP1+oU$;U|8`*a82Y) zi~3Map7g%sv<~sV5}^n_IC^)lW25~7Q*OKL2PDg*W~D(D--rg6NiNu~_t4d0n?^rH z`S_WvX3eU>Rt&ygAvMZSLlbrK-Q!1u1mQlpeXW{PQ~_Mqf%&06r^3$IZl-`?1@l^$ FdVcl&IvoH2 diff --git a/source/figures/documentdb.png b/source/figures/documentdb.png new file mode 100644 index 0000000000000000000000000000000000000000..b5524057fee296e3f3d515ea7033f5bc1b75db88 GIT binary patch literal 48954 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%0Ao7i4ZbW&EbK1wRC?J^e5!Zi)4lrS7D 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 P{L@g?QhB9(?LYqmcC{%) literal 0 HcmV?d00001 diff --git a/source/mongodb-vs-documentdb.txt b/source/mongodb-vs-documentdb.txt deleted file mode 100644 index 75be5d99c..000000000 --- a/source/mongodb-vs-documentdb.txt +++ /dev/null @@ -1,345 +0,0 @@ -.. _mongodb-vs-documentdb: - -========================= -MongoDB Versus DocumentDB -========================= - -.. contents:: On this page - :local: - :backlinks: none - :depth: 2 - -It may seem that there are multiple options for deploying MongoDB in the cloud. -Amazon DocumentDB, for example, claims to be an AWS-native database with full support for -the MongoDB API. While they support some MongoDB features, it is important to note that -DocumentDB is not fully compatible. The only place to access fully-featured MongoDB as -a service on AWS is through MongoDB Atlas. - -In this comparison, we aim to explain the differences between Amazon DocumentDB and -MongoDB Atlas, focusing on the following key areas: - -- **Compatibility**: Amazon claims that migrating an application from MongoDB to DocumentDB - is "as easy as changing the database endpoint to the new Amazon DocumentDB cluster". - We have debunked this by running a suite of compatibility tests, which show that - DocumentDB is only ~34% compatible with the features and functionality available in - MongoDB Atlas. -- **Architecture**: Amazon DocumentDB is built on top of AWS's Aurora platform, which has - historically been used to host relational databases. This has implications for - scalability and the potential to add more native MongoDB features in the future. - DocumentDB can be deployed using Elastic Clusters, which impose additional operational - constraints. -- **Deployment**: DocumentDB relies on AWS's proprietary technology, and there - is no way to run the database outside of AWS. -- **Developer Productivity**: DocumentDB lacks native integration with features or tools - to support mobile, time-series, search, and analytical use cases. Users must take on the - operational burden of moving data out of DocumentDB and into other services in order to - access features to support those workloads. -- **Operational Maturity**: Database management and maintenance in DocumentDB is held - back by limited tooling, a complex upgrade process, few backup options, and gaps in - security features. - -What Is DocumentDB? -------------------- - -Amazon DocumentDB is a NoSQL, JSON document database service with a limited degree of -compatibility with MongoDB. - -DocumentDB is **not based on MongoDB Server.** Rather, it emulates the MongoDB API, and -runs on top of Amazon's Aurora backend platform. This creates significant architectural -constraints, functionality limitations, and broken compatibility. - -DocumentDB claims to support the MongoDB 4.0 API, which implies that it is at parity with -MongoDB v4.0, released back in June 2018. However, this is only partially true, as the -majority -of MongoDB 4.0's differentiating features are not supported by DocumentDB. In addition, -compatibility testing reveals that -**DocumentDB fails more than 66% of the MongoDB API correctness tests.** -Applications written for MongoDB will need to be rewritten to work with Amazon DocumentDB. - -.. image:: /figures/documentdb.avif - :alt: Comparison of Amazon DocumentDB and MongoDB - -The following table summarizes the key differences between DocumentDB and MongoDB's -on-demand, elastic, and fully managed -`Atlas service `__: - -.. list-table:: - :header-rows: 1 - :stub-columns: 1 - :widths: 10 20 20 - - * - - - Amazon DocumentDB - - MongoDB Atlas - - * - Fully compatible with MongoDB - - **No.** Compatibility is incomplete. Imitation API fails 66% of correctness tests. - - **Yes.** - - * - Support for latest MongoDB version - - **No.** Feature set resembles MongoDB 3.0/3.2, released in 2015. - - **Yes.** Supports MongoDB 7.0. - - * - Scale writes and partition data beyond a single node / Sharding support - - **Limited.** Sharding available within an Elastic Cluster deployment. - Only hash-sharding. Prone to develop hot partitions. Elastic Clusters impose - additional functionality limitations. - - **Yes.** Full support for multiple sharding methodologies, including hash, range, - and geo-zone. - - * - Replicate and scale beyond a single region / Comply with data locality regulations - and survive regional outages - - **No.** Limited to 20 clusters per region, with 32 shards per cluster and 2 instances - per shard. All constrained to a single region. - - **Yes.** Global clusters, with up to 50 replicas per shard across multiple regions. - - * - High resilience, rapid failure recovery, fast failover, retryable writes, multi-region - - **No.** ~120-second failover, no retryable writes, no multi-region within a single - or elastic cluster. - - **Yes.** Typical failover under 5 seconds, retryable reads and writes, multi-region - and multi-cloud clusters. - - * - Multi-statement distributed ACID transactions - - **Limited.** Ambiguous commits, poor error handling, small data sizes. - Transactions not supported across shards in Elastic Clusters. - - **Yes.** - - * - Integrated text search, geospatial processing, graph traversals - - **Limited.** Data replicated to multiple prerequisite bolt-on AWS services for - text search, and only basic geospatial operators, adding cost and complexity. - - **Yes.** All available from a single API and platform. - - * - Native support for time-series data - - **No.** - - **Yes.** - - * - Hedged Reads: Queries submitted to multiple replicas for consistent low latency - - **No.** - - **Yes.** - - * - Online Archive: Automatically tier data out from database to cloud object storage (Amazon S3) - - **No.** - - **Yes.** `Online Archive `__ - - * - Integrated querying of data in Amazon S3 - - **No.** Data must be replicated to multiple adjacent AWS services, driving up cost - and complexity - - **Yes.** `Atlas Data Federation `__ - - * - On-demand Materialized Views - - **No.** - - **Yes.** ``$merge`` aggregation stage. - - * - Schema governance - - **No.** Schema controls must be enforced in the app. - - **Yes.** JSON schema. - - * - Rich data types - - **Limited.** DocumentDB supports storing ``decimal128`` values, but none of the - powerful aggregation features for working with them. - - **Yes.** - - * - Reactive, event-driven data pipelines - - **Limited.** Change streams run against primary only and incur additional cost. - - **Yes.** MongoDB Change Streams & Atlas Triggers. - - * - Support for role-based access control and authentication restrictions - - **Limited.** Coarse-grained roles only. - - **Yes.** - - * - Fine-grained monitoring telemetry & prescriptive performance recommendations - - **No.** Fewer than 50 metrics. - - **Yes.** More than 100 metrics. Performance Advisor for index and schema recommendations. - - * - Client-side field level encryption for fine-grained separation of duties in the cloud - - **No.** - - **Yes.** - - * - Queryable Encryption - - **No.** - - **Yes.** `Available in MongoDB 7.0 `__ - and later versions. - - * - Availability of advanced developer and analysis tools - - **Limited.** - - **Yes.** MongoDB Compass, Charts, SQL Connector, Tableau Connector, Power BI - Connector, Spark Connector. - - * - Freedom from vendor lock-in - - **No.** AWS only. - - **Yes.** AWS, Azure, and Google Cloud. Available on more than 110 regions. - - * - Develop and run anywhere: on your mobile device, on your laptop, in your own data - center, and in hybrid configurations. - - **No.** AWS only. - - **Yes.** `Atlas App Services `__ - / MongoDB Server / multi-cloud clusters in Atlas. - - * - Mobile and Edge Sync - - **No.** Data must be replicated to multiple adjacent AWS services, driving up cost - and complexity. - - **Yes.** `Atlas for the Edge. `__ - - * - Access to MongoDB expertise - - **No.** - - **Yes.** Hundreds of engineers with multi-year MongoDB development, support, and - consulting experience. - -What Is MongoDB Atlas? ----------------------- - -MongoDB offers the fully managed, on-demand, and global -`MongoDB Atlas `__ service in the -public cloud. Atlas enables customers to deploy, operate, and scale MongoDB databases -on AWS, Azure, or Google Cloud. MongoDB Atlas is available through a pay-as-you-go model -and billed on an hourly basis. It's easy to get started--use a simple GUI or programmatic -API calls to select the public cloud provider, region, instance size, and features you -need. - -MongoDB Atlas provides: - -- Automated database and infrastructure provisioning, along with autoscaling, so teams can - get the database resources they need, when they need them, and can elastically scale in - response to application demands. - -- Security features to protect your data, with network isolation, fine-grained access - control, auditing, and end-to-end encryption down to the level of individual fields, - enabling you to comply with regulations such as ISO, HIPAA, and GDPR. Built-in - replication both within and across regions for always-on availability. - -- Global Clusters for a fully managed, globally distributed database that provides low - latency and responsive reads and writes to users anywhere, with strong data placement - controls for regulatory compliance. - -- Combined transactional and analytical capabilities with Atlas Analytics Nodes to isolate - analytics queries from operational workloads while providing real-time insight. Native - MongoDB analytics tools, such as MongoDB Charts and MongoDB Connectors (for SQL, Tableau, - Power BI, and Spark), are configured to utilize Analytics Nodes by default. MongoDB's rich - aggregation pipeline engine allows users to run expressive queries against their data. - -- Fully integrated native MongoDB data visualization tools. MongoDB Charts supports - the full richness of the document model, including nested, hierarchical, and geospatial - data, and provides embedding and sharing capabilities. Quickly build visualizations of - your data without needing to deploy or manage any software or infrastructure. - -- Fully integrated `MongoDB Atlas Data Federation `__, - which allows users to quickly run federated - queries across Atlas clusters and data stored on Amazon S3 in many formats. The MongoDB - Query Language (MQL) and tools allow users to get value from data faster. - -- Fully managed backups with point-in-time recovery to protect against data corruption and - the ability to query backups in-place without full restores. - -- `Automatic data tiering `__, which helps - lower costs by moving data to lower-cost storage such as Amazon S3. - -- Fine-grained monitoring and customizable alerts for comprehensive performance visibility. - Automated patching and single-click upgrades for new major versions of the database, - enabling you to take advantage of the latest MongoDB features. - -- Access to the `Atlas App Services `__, - with Data Access Controls, Functions, and Triggers - delivered in a completely serverless model. - -- Native time-series support optimized for highly performant data ingestion and - querying, along with reduced I/O and storage overhead. - -- The full-text `Atlas Search `__ - service, which provides rich search capabilities against - your fully managed databases with no additional infrastructure or systems to provision, - manage, or scale. - -- Live migration to move your self-managed MongoDB clusters into the Atlas service or to - move Atlas clusters between cloud providers. - -- `Stable API `__ - to make upgrades risk-free, future-proofing your development. - -- Widespread coverage on the major cloud platforms with availability in more than 110 - cloud regions across Amazon Web Services, Microsoft Azure, and Google Cloud. MongoDB - Atlas delivers a consistent experience across each of the cloud platforms, ensuring - developers can deploy wherever they need to without compromising critical functionality - or risking lock-in. - -`MongoDB Atlas `__ is serving a vast range of workloads for startups, Fortune 500 companies, -and government agencies, including mission-critical applications handling highly sensitive -data in regulated industries. The developer experience across MongoDB Atlas and -self-managed MongoDB is consistent, ensuring that you can easily move from on-premises to -the public cloud, or between providers, as your needs evolve. - -Beyond the database, `MongoDB Atlas Data Federation `__ -allows you to simultaneously query -data in any format on Amazon S3 and in Atlas clusters using the MongoDB Query Language -(MQL). With Atlas Data Federation, you can realize the value of your S3 data lake faster: -you don't have to move data anywhere; you can work with complex data immediately in its -native form; and with its fully managed, serverless architecture, you control costs and -remove the operational burden. DocumentDB offers no equivalent capability, and so users -must spin up an entirely separate service with a different query language to access S3 -data. - -Built and run by the same team that develops the data platform, MongoDB Atlas is the best -way to run MongoDB apps. - -Is DocumentDB Compatible with MongoDB? --------------------------------------- - -Amazon DocumentDB claims to support the MongoDB 4.0 API, which implies that it is at -parity with MongoDB v4.0, released back in June 2018. In fact, the DocumentDB 4.0 -feature set still closely resembles early MongoDB 3.0 and 3.2, released in 2015, -and compatibility testing reveals that DocumentDB fails 66% of the MongoDB API -correctness tests. Applications written for MongoDB will need to be rewritten to work -with Amazon DocumentDB. However, since DocumentDB emulates a MongoDB API, applications -written for DocumentDB can be easily migrated into MongoDB Atlas. - -Want to Learn More? -------------------- - -Interested in migrating from DocumentDB to MongoDB Atlas? Please refer to our -migration guide. - -Interested in up-to-date results on DocumentDB's compatibility with the MongoDB API? Get -the latest results at -`Is DocumentDB Really MongoDB? `__ - -`Try MongoDB Atlas for free `__ -for a real MongoDB experience. - -FAQs ----- - -When should I use a document database? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Document databases store data in JSON-like documents, which allows them to be inherently -easy for developers to work with. MongoDB is a modern document database that contains -many of the powerful features found in popular relational databases. These include -ACID-compliant transactions, schema governance, enterprise-grade security, and more. - -Can MongoDB read data from Amazon S3? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -MongoDB offers the Atlas Data Federation engine, which allows users to quickly and easily -query data in any format on Amazon S3 using the MongoDB Query API. - -What are the key differences between MongoDB and DocumentDB? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -DocumentDB does not contain any MongoDB code, supports a limited subset of MongoDB -features, and is more costly and difficult to manage. - -Is MongoDB a good fit for mobile and edge use cases? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -MongoDB offers `Atlas for the Edge `__, -a solution that streamlines data management between -mobile and edge devices with an offline-first approach. This means that synchronization and -conflict resolution are automatically handled in any case, regardless of network -connectivity. Atlas for the Edge also allows users to process data on-premise in Edge -Servers, reducing the distance between edge devices and compute, thereby decreasing -latency. - -Is MongoDB a good fit for web applications? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -As part of its developer data platform, MongoDB Atlas Application Services offers a suite -of tools for building web applications. From e9fc69e258adb8a442139b3ec14da976d3653ae2 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Thu, 7 Dec 2023 15:14:55 -0600 Subject: [PATCH 07/14] wip --- source/index.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.txt b/source/index.txt index e5d348023..8c696ad18 100644 --- a/source/index.txt +++ b/source/index.txt @@ -149,7 +149,7 @@ Comparison with Other Document Databases See the following pages to learn about the differences between MongoDB and other document databases: -- :ref:`mongodb-vs-documentdb` +- :ref:`documentdb-support` .. toctree:: From 4ba1a0b80d3f453502956c07d8483f6d66a94709 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Thu, 7 Dec 2023 16:06:56 -0600 Subject: [PATCH 08/14] mw edits --- source/documentdb-support.txt | 54 +++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/source/documentdb-support.txt b/source/documentdb-support.txt index 6fe847042..a7507b7b8 100644 --- a/source/documentdb-support.txt +++ b/source/documentdb-support.txt @@ -1,8 +1,8 @@ .. _documentdb-support: -================================ -Amazon DocumentDB Supportability -================================ +=============================== +Amazon DocumentDB Compatibility +=============================== .. contents:: On this page :local: @@ -12,33 +12,28 @@ Amazon DocumentDB Supportability .. figure:: /figures/documentdb.png :alt: Amazon DocumentDB logo -`Amazon DocumentDB `__ -(with MongoDB compatibility) is a fast, reliable, and fully managed -database service. Amazon DocumentDB makes it easy to set up, operate, and scale -MongoDB-compatible databases in the cloud. With Amazon DocumentDB, you can run the same -application code and use the same drivers and tools that you use with MongoDB. +`Amazon DocumentDB (with MongoDB compatibility) `__ +is a fast, reliable, and fully managed database service. Amazon DocumentDB makes it easy +to set up, operate, and scale MongoDB-compatible databases in the cloud. +With Amazon DocumentDB, you can run the same application code and use the same drivers +and tools that you use with MongoDB. Version Information ------------------- -Amazon DocumentDB currently supports MongoDB 4.0 and MongoDB 5.0. These are several -major versions behind what `MongoDB Atlas `__ -currently offers (see `MongoDB Evolved – Version History `__ -for more information), and as a result are lacking support for newer features and -functionality. +Amazon DocumentDB currently supports MongoDB v4.0 and MongoDB v5.0. These versions lack +support for the newer features and functionality in the versions of MongoDB available +on `MongoDB Atlas. `__ + +To learn more about the features available in each version of MongoDB, see +`MongoDB Evolved - Version History. `__ Compatibility ------------- -AWS outlines to what degree DocumentDB is -`compatible with MongoDB 4.0 and MongoDB 5.0. `__ -There is additional documentation that lays out the functional differences between -`AWS DocumentDB and MongoDB. `__ - -A convenient list of tables of the -`supported MongoDB APIs, operations, and data types `__ -can also be found, but to summarize the following are either only available in a limited -capacity or not supported by DocumentDB: +As of November 2023, Amazon DocumentDB is only 34 percent compatible with the MongoDB API. +On Amazon DocumentDB, the following MongoDB features are +available only in a limited capacity or are not supported at all: - Features: `Capped collections `__, `Map-Reduce `__, @@ -62,9 +57,18 @@ capacity or not supported by DocumentDB: - Aggregation Stages: ``$collStats``, ``$facet``, ``$bucket``, ``$bucketAuto``, ``$sortByCount``, ``$listLocalSessions``, ``$listSessions``, ``$graphLookup`` -From the `Amazon DocumentDB / MongoDB compatibility tester site `__, as of November, 2023 -DocumentDB appears to only be 33.84% compatible (based on the MongoDB API Tester). +To learn more about Amazon DocumentDB's compatibility with MongoDB v4.0 and MongoDB v5.0, +see the following AWS documentation: + +- `MongoDB Compatibility `__ +- `Functional Differences: Amazon DocumentDB and MongoDB `__ +- `Supported MongoDB APIs, Operations, and Data Types `__ + +For the most current compatibility status between Amazon DocumentDB and MongoDB, see +`Is Amazon DocumentDB Compatible with MongoDB Atlas? `__ Support ------- -MongoDB does not offer commercial support for AWS DocumentDB. For assistance with this product specifically AWS Support should be contacted directly. + +MongoDB doesn't offer commercial support for Amazon DocumentDB. For help with this product, +contact AWS Support directly. From 0abb8fedd0d5f3d1f4c75199b0a392c944c0589d Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Fri, 8 Dec 2023 12:41:43 -0600 Subject: [PATCH 09/14] minor fixes and tags --- source/documentdb-support.txt | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/source/documentdb-support.txt b/source/documentdb-support.txt index a7507b7b8..14cbd3366 100644 --- a/source/documentdb-support.txt +++ b/source/documentdb-support.txt @@ -4,6 +4,13 @@ Amazon DocumentDB Compatibility =============================== +.. facet:: + :name: genre + :values: reference + +.. meta:: + :keywords: AWS, support + .. contents:: On this page :local: :backlinks: none @@ -25,24 +32,27 @@ Amazon DocumentDB currently supports MongoDB v4.0 and MongoDB v5.0. These versio support for the newer features and functionality in the versions of MongoDB available on `MongoDB Atlas. `__ -To learn more about the features available in each version of MongoDB, see -`MongoDB Evolved - Version History. `__ +.. tip:: MongoDB Version History + + To learn more about the features available in each version of MongoDB, see + `MongoDB Evolved - Version History. `__ Compatibility ------------- -As of November 2023, Amazon DocumentDB is only 34 percent compatible with the MongoDB API. +As of November 2023, Amazon DocumentDB is only about 34 percent compatible with the +MongoDB API. On Amazon DocumentDB, the following MongoDB features are available only in a limited capacity or are not supported at all: - Features: `Capped collections `__, - `Map-Reduce `__, + `map-reduce operations `__, `GridFS `__, - `Text Indexes `__, - `Partial Indexes `__, - `Case-Insensitive Indexes `__ + `text indexes `__, + `partial indexes `__, + `case-insensitive indexes `__ - Commands: ``collMod``, ``createView``, ``filemd5``, ``reIndex``, ``connPoolStats``, - ``dbHash``, ``features``, Sharding commands (aside from ``enableSharding`` and + ``dbHash``, ``features``, sharding commands (aside from ``enableSharding`` and ``shardCollection``) - Query Operators: ``$expr``, ``$text``, ``$where``, ``$meta``, ``$box``, ``$center``, ``$centerSphere``, ``$polygon``, ``$near`` From 5bb48468050219f8c5c82be905c285a1ca558ef5 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Fri, 8 Dec 2023 12:45:09 -0600 Subject: [PATCH 10/14] vale suggestion --- source/documentdb-support.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/documentdb-support.txt b/source/documentdb-support.txt index 14cbd3366..68ac48a11 100644 --- a/source/documentdb-support.txt +++ b/source/documentdb-support.txt @@ -28,7 +28,7 @@ and tools that you use with MongoDB. Version Information ------------------- -Amazon DocumentDB currently supports MongoDB v4.0 and MongoDB v5.0. These versions lack +Amazon DocumentDB supports MongoDB v4.0 and MongoDB v5.0. These versions lack support for the newer features and functionality in the versions of MongoDB available on `MongoDB Atlas. `__ From f0c84884bc1a5005657fedd2842277f64c13cc8f Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Fri, 8 Dec 2023 17:00:36 -0600 Subject: [PATCH 11/14] rm feedback --- source/documentdb-support.txt | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/documentdb-support.txt b/source/documentdb-support.txt index 68ac48a11..a6c409fc9 100644 --- a/source/documentdb-support.txt +++ b/source/documentdb-support.txt @@ -28,8 +28,8 @@ and tools that you use with MongoDB. Version Information ------------------- -Amazon DocumentDB supports MongoDB v4.0 and MongoDB v5.0. These versions lack -support for the newer features and functionality in the versions of MongoDB available +Amazon DocumentDB supports MongoDB v4.0 and MongoDB v5.0. These versions don't +support all of the newer features and functionality in the versions of MongoDB available on `MongoDB Atlas. `__ .. tip:: MongoDB Version History @@ -40,23 +40,24 @@ on `MongoDB Atlas. `__ Compatibility ------------- -As of November 2023, Amazon DocumentDB is only about 34 percent compatible with the +As of November 2023, Amazon DocumentDB is about 34 percent compatible with the MongoDB API. + On Amazon DocumentDB, the following MongoDB features are -available only in a limited capacity or are not supported at all: +available in a limited capacity or are not supported at all: -- Features: `Capped collections `__, +- **Features**: `Capped collections `__, `map-reduce operations `__, `GridFS `__, `text indexes `__, `partial indexes `__, `case-insensitive indexes `__ -- Commands: ``collMod``, ``createView``, ``filemd5``, ``reIndex``, ``connPoolStats``, +- **Commands**: ``collMod``, ``createView``, ``filemd5``, ``reIndex``, ``connPoolStats``, ``dbHash``, ``features``, sharding commands (aside from ``enableSharding`` and ``shardCollection``) -- Query Operators: ``$expr``, ``$text``, ``$where``, ``$meta``, ``$box``, ``$center``, +- **Query Operators**: ``$expr``, ``$text``, ``$where``, ``$meta``, ``$box``, ``$center``, ``$centerSphere``, ``$polygon``, ``$near`` -- Aggregation Operators: ``$accumulator``, ``$count``, ``$ceil``, ``$exp``, ``$floor``, +- **Aggregation Operators**: ``$accumulator``, ``$count``, ``$ceil``, ``$exp``, ``$floor``, ``$ln``, ``$log``, ``$log10``, ``$pow``, ``$sqrt``, ``$trunc``, ``$round``, ``$first``, ``$last``, ``$switch``, ``$binarySize``, ``$bsonSize``, ``$dateFromParts``, ``$dateToParts``, ``$dateTrunc``, ``$dateDiff``, ``$setDifference``, ``$anyElementTrue``, @@ -64,7 +65,7 @@ available only in a limited capacity or are not supported at all: ``$regexFindAll``, ``$regexMatch``, ``$replaceOne``, ``$replaceAll``, ``$convert``, ``$toBool``, ``$toDate``, ``$toDecimal``, ``$toDouble``, ``$toInt``, ``$toLong``, ``$toObjectId``, ``$toString``, ``$isNumber``, ``$rand``, ``$sampleRate``, ``$getField`` -- Aggregation Stages: ``$collStats``, ``$facet``, ``$bucket``, ``$bucketAuto``, +- **Aggregation Stages**: ``$collStats``, ``$facet``, ``$bucket``, ``$bucketAuto``, ``$sortByCount``, ``$listLocalSessions``, ``$listSessions``, ``$graphLookup`` To learn more about Amazon DocumentDB's compatibility with MongoDB v4.0 and MongoDB v5.0, @@ -81,4 +82,4 @@ Support ------- MongoDB doesn't offer commercial support for Amazon DocumentDB. For help with this product, -contact AWS Support directly. +contact `AWS Support. `__ From 844421a3833527ebb9a509222afbc8712a4510c1 Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Fri, 8 Dec 2023 17:08:41 -0600 Subject: [PATCH 12/14] wording changes --- source/documentdb-support.txt | 2 +- source/index.txt | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/documentdb-support.txt b/source/documentdb-support.txt index a6c409fc9..de461af25 100644 --- a/source/documentdb-support.txt +++ b/source/documentdb-support.txt @@ -1,4 +1,4 @@ -.. _documentdb-support: +.. _documentdb-compat: =============================== Amazon DocumentDB Compatibility diff --git a/source/index.txt b/source/index.txt index 8c696ad18..038bd4a11 100644 --- a/source/index.txt +++ b/source/index.txt @@ -143,13 +143,13 @@ Featured Community-Supported Libraries Don't see your desired language? Browse more `community-supported libraries `__. -Comparison with Other Document Databases ----------------------------------------- +Compatibility of Other Document Databases +----------------------------------------- -See the following pages to learn about the differences between MongoDB and other -document databases: +See the following pages for information about other document databases' compatibility +with MongoDB: -- :ref:`documentdb-support` +- :ref:`documentdb-compat` .. toctree:: From 18297efd4b391c7026f831bf32903946e3d2850f Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Fri, 8 Dec 2023 17:11:57 -0600 Subject: [PATCH 13/14] wording --- source/index.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/index.txt b/source/index.txt index 038bd4a11..432988de4 100644 --- a/source/index.txt +++ b/source/index.txt @@ -143,8 +143,8 @@ Featured Community-Supported Libraries Don't see your desired language? Browse more `community-supported libraries `__. -Compatibility of Other Document Databases ------------------------------------------ +Compatibility with Other Document Databases +------------------------------------------- See the following pages for information about other document databases' compatibility with MongoDB: From a01b9727add9a9edd311e36a3e02363d10828adc Mon Sep 17 00:00:00 2001 From: Mike Woofter Date: Fri, 8 Dec 2023 17:13:38 -0600 Subject: [PATCH 14/14] vale --- source/documentdb-support.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/documentdb-support.txt b/source/documentdb-support.txt index de461af25..aa60aa4e3 100644 --- a/source/documentdb-support.txt +++ b/source/documentdb-support.txt @@ -29,7 +29,7 @@ Version Information ------------------- Amazon DocumentDB supports MongoDB v4.0 and MongoDB v5.0. These versions don't -support all of the newer features and functionality in the versions of MongoDB available +support all the newer features and functionality in the versions of MongoDB available on `MongoDB Atlas. `__ .. tip:: MongoDB Version History