<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: mongodb</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/mongodb.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2024-08-12T15:36:47+00:00</updated><author><name>Simon Willison</name></author><entry><title>SQL Injection Isn't Dead: Smuggling Queries at the Protocol Level</title><link href="https://simonwillison.net/2024/Aug/12/smuggling-queries-at-the-protocol-level/#atom-tag" rel="alternate"/><published>2024-08-12T15:36:47+00:00</published><updated>2024-08-12T15:36:47+00:00</updated><id>https://simonwillison.net/2024/Aug/12/smuggling-queries-at-the-protocol-level/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://media.defcon.org/DEF%20CON%2032/DEF%20CON%2032%20presentations/DEF%20CON%2032%20-%20Paul%20Gerste%20-%20SQL%20Injection%20Isn%27t%20Dead%20Smuggling%20Queries%20at%20the%20Protocol%20Level.pdf"&gt;SQL Injection Isn&amp;#x27;t Dead: Smuggling Queries at the Protocol Level&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
PDF slides from a presentation by &lt;a href="https://twitter.com/pspaul95"&gt;Paul Gerste&lt;/a&gt; at DEF CON 32. It turns out some databases have vulnerabilities in their binary protocols that can be exploited by carefully crafted SQL queries.&lt;/p&gt;
&lt;p&gt;Paul demonstrates an attack against PostgreSQL (which works in some but not all of the PostgreSQL client libraries) which uses a message size overflow, by embedding a string longer than 4GB (2**32 bytes) which overflows the maximum length of a string in the underlying protocol and writes data to the subsequent value. He then shows a similar attack against MongoDB.&lt;/p&gt;
&lt;p&gt;The current way to protect against these attacks is to ensure a size limit on incoming requests. This can be more difficult than you may expect - Paul points out that alternative paths such as WebSockets might bypass limits that are in place for regular HTTP requests, plus some servers may apply limits before decompression, allowing an attacker to send a compressed payload that is larger than the configured limit.&lt;/p&gt;
&lt;p&gt;&lt;img alt="How Web Apps Handle Large Payloads. Potential bypasses: - Unprotected endpoints - Compression - WebSockets (highlighted) - Alternate body types - Incrementation.  Next to WebSockets:  - Compression support - Large message size - Many filters don't apply" src="https://static.simonwillison.net/static/2024/sql-injection-websockets.jpg" /&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/mxgp7v/sql_injection_isn_t_dead_smuggling"&gt;lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/postgresql"&gt;postgresql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sql-injection"&gt;sql-injection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/websockets"&gt;websockets&lt;/a&gt;&lt;/p&gt;



</summary><category term="http"/><category term="mongodb"/><category term="postgresql"/><category term="security"/><category term="sql-injection"/><category term="websockets"/></entry><entry><title>What are the advantages and disadvantages of using MongoDB vs CouchDB vs Cassandra vs Redis?</title><link href="https://simonwillison.net/2010/Dec/1/what-are-the-advantages/#atom-tag" rel="alternate"/><published>2010-12-01T12:54:00+00:00</published><updated>2010-12-01T12:54:00+00:00</updated><id>https://simonwillison.net/2010/Dec/1/what-are-the-advantages/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-advantages-and-disadvantages-of-using-MongoDB-vs-CouchDB-vs-Cassandra-vs-Redis/answer/Simon-Willison"&gt;What are the advantages and disadvantages of using MongoDB vs CouchDB vs Cassandra vs Redis?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I see Redis as a different category from the other three - kind of like you wouldn't say "what are the advantages of MySQL v.s. Memcached". Redis makes an excellent complement to pretty much any other persistent storage mechanism. I expanded on this here: &lt;span&gt;&lt;a href="http://simonwillison.net/2009/Oct/22/redis/"&gt;http://simonwillison.net/2009/Oc...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cassandra"&gt;cassandra&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nosql"&gt;nosql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redis"&gt;redis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="cassandra"/><category term="couchdb"/><category term="mongodb"/><category term="nosql"/><category term="redis"/><category term="quora"/></entry><entry><title>What is the best way to integrate MongoDB with Django?</title><link href="https://simonwillison.net/2010/Oct/27/what-is-the-best-mongodb/#atom-tag" rel="alternate"/><published>2010-10-27T18:15:00+00:00</published><updated>2010-10-27T18:15:00+00:00</updated><id>https://simonwillison.net/2010/Oct/27/what-is-the-best-mongodb/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-best-way-to-integrate-MongoDB-with-Django/answer/Simon-Willison"&gt;What is the best way to integrate MongoDB with Django?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Personally, I just "import pymongo" and start calling the regular Python API - no need for any special treatment to get it working with Django.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="mongodb"/><category term="quora"/></entry><entry><title>Geospatial Indexing in MongoDB</title><link href="https://simonwillison.net/2010/Mar/2/geospatial/#atom-tag" rel="alternate"/><published>2010-03-02T20:12:09+00:00</published><updated>2010-03-02T20:12:09+00:00</updated><id>https://simonwillison.net/2010/Mar/2/geospatial/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Geospatial+Indexing"&gt;Geospatial Indexing in MongoDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
New in version 1.3.3. Handles “order by distance from” queries using a geohash approach under the hood, automatically searching nearby grid squares until the correct number of results have been gathered. Bounding box search is planned for a future release.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://groups.google.com/group/mongodb-user/browse_thread/thread/48f6c7defd08e880"&gt;MongoDB 1.3.3 Released&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geohash"&gt;geohash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;&lt;/p&gt;



</summary><category term="geohash"/><category term="geospatial"/><category term="mongodb"/></entry><entry><title>Notes from a production MongoDB deployment</title><link href="https://simonwillison.net/2010/Feb/28/mongodb/#atom-tag" rel="alternate"/><published>2010-02-28T23:05:24+00:00</published><updated>2010-02-28T23:05:24+00:00</updated><id>https://simonwillison.net/2010/Feb/28/mongodb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.boxedice.com/2010/02/28/notes-from-a-production-mongodb-deployment/"&gt;Notes from a production MongoDB deployment&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Notes from running MongoDB for 8 months in production, with 664 million documents spread across 72 GB master and slave servers located in two different data centers.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sysadmin"&gt;sysadmin&lt;/a&gt;&lt;/p&gt;



</summary><category term="mongodb"/><category term="scaling"/><category term="sysadmin"/></entry><entry><title>"MongoDB is fantastic for logging"</title><link href="https://simonwillison.net/2009/Aug/26/logging/#atom-tag" rel="alternate"/><published>2009-08-26T19:09:26+00:00</published><updated>2009-08-26T19:09:26+00:00</updated><id>https://simonwillison.net/2009/Aug/26/logging/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-logging"&gt;&amp;quot;MongoDB is fantastic for logging&amp;quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Sounds tempting... high performance inserts, JSON structured records and capped collections if you only want to keep the past X entries. If you care about older historic data but still want to preserve space you could run periodic jobs to roll up log entries in to summarised records. It shouldn’t be too hard to write a command-line script that hooks in to Apache’s logging directive and writes records to MongoDB.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/apache"&gt;apache&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/logging"&gt;logging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;&lt;/p&gt;



</summary><category term="apache"/><category term="json"/><category term="logging"/><category term="mongodb"/></entry><entry><title>Why we migrated from MySQL to MongoDB</title><link href="https://simonwillison.net/2009/Jul/27/mongodb/#atom-tag" rel="alternate"/><published>2009-07-27T10:49:49+00:00</published><updated>2009-07-27T10:49:49+00:00</updated><id>https://simonwillison.net/2009/Jul/27/mongodb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.boxedice.com/2009/07/25/choosing-a-non-relational-database-why-we-migrated-from-mysql-to-mongodb/"&gt;Why we migrated from MySQL to MongoDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Includes some useful information on MongoDB’s limitations—for example, running many different collections can waste disk space and repairing large datasets or bulk deleting many rows can block and lock the database for the duration of the operation.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/databases"&gt;databases&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/documentstores"&gt;documentstores&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mysql"&gt;mysql&lt;/a&gt;&lt;/p&gt;



</summary><category term="databases"/><category term="documentstores"/><category term="mongodb"/><category term="mysql"/></entry><entry><title>TurboGears on Sourceforge</title><link href="https://simonwillison.net/2009/Jul/17/sourceforge/#atom-tag" rel="alternate"/><published>2009-07-17T02:30:48+00:00</published><updated>2009-07-17T02:30:48+00:00</updated><id>https://simonwillison.net/2009/Jul/17/sourceforge/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://compoundthinking.com/blog/index.php/2009/07/16/turbogears-on-sourceforge/"&gt;TurboGears on Sourceforge&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Sourceforge recently relaunched, powered by TurboGears 2 and MongoDB. Mark Ramm has the details.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mark-ramm"&gt;mark-ramm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sourceforge"&gt;sourceforge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/turbogears"&gt;turbogears&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/turbogears2"&gt;turbogears2&lt;/a&gt;&lt;/p&gt;



</summary><category term="mark-ramm"/><category term="mongodb"/><category term="sourceforge"/><category term="turbogears"/><category term="turbogears2"/></entry><entry><title>Using Mongo for Real-Time Analytics</title><link href="https://simonwillison.net/2009/Jun/30/analytics/#atom-tag" rel="alternate"/><published>2009-06-30T19:28:43+00:00</published><updated>2009-06-30T19:28:43+00:00</updated><id>https://simonwillison.net/2009/Jun/30/analytics/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.10gen.com/blog/2009/3/using-mongo-for-real-time-analytics"&gt;Using Mongo for Real-Time Analytics&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
MongoDB supports an “upsert” query, which when combined with the $inc operator can cause counter fields to be incremented if they exist and created otherwise. This makes it a great fit for real-time analytics applications (one increment per page view), something that regular relational databases aren’t particularly good at.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/counters"&gt;counters&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/databases"&gt;databases&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/increment"&gt;increment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/upsert"&gt;upsert&lt;/a&gt;&lt;/p&gt;



</summary><category term="counters"/><category term="databases"/><category term="increment"/><category term="mongodb"/><category term="upsert"/></entry><entry><title>MongoDB</title><link href="https://simonwillison.net/2009/Jun/30/mongodb/#atom-tag" rel="alternate"/><published>2009-06-30T19:13:04+00:00</published><updated>2009-06-30T19:13:04+00:00</updated><id>https://simonwillison.net/2009/Jun/30/mongodb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Lots of discussions about this at EuroPython today—it’s a document database, very similar to CouchDB but significantly faster and suggested for production use. Best of all, trying it out on OS X is as easy as extracting the tarball and running “bin/mongod --dbpath /tmp/test-mongo-db run”.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/documentstore"&gt;documentstore&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/europython"&gt;europython&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/keyvaluestore"&gt;keyvaluestore&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nonrelationaldatabase"&gt;nonrelationaldatabase&lt;/a&gt;&lt;/p&gt;



</summary><category term="couchdb"/><category term="documentstore"/><category term="europython"/><category term="json"/><category term="keyvaluestore"/><category term="macos"/><category term="mongodb"/><category term="nonrelationaldatabase"/></entry><entry><title>MongoDB - Capped Collections</title><link href="https://simonwillison.net/2009/Jun/7/mongodb/#atom-tag" rel="alternate"/><published>2009-06-07T12:50:27+00:00</published><updated>2009-06-07T12:50:27+00:00</updated><id>https://simonwillison.net/2009/Jun/7/mongodb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.mongodb.org/post/116405435/capped-collections"&gt;MongoDB - Capped Collections&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Collections with a size limit that automatically expire older entries are interesting—useful for things like a “recent searches on this site” feature.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cappedcollections"&gt;cappedcollections&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongodb"&gt;mongodb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/search"&gt;search&lt;/a&gt;&lt;/p&gt;



</summary><category term="cappedcollections"/><category term="mongodb"/><category term="search"/></entry></feed>