Concurrency Improvements
When going to disk, the server will yield the write lock when writing
data that is not likely to be in memory. The initial
implementation of this feature now exists:
See SERVER-2563 for more information.
The specific operations yield in 2.0 are:
- Updates by _id
- Removes
- Long cursor iterations
Default Stack Size
MongoDB 2.0 reduces the default stack size. This change can reduce total memory
usage when there are many (e.g., 1000+) client connections, as there is
a thread per connection. While portions of a thread’s stack can be
swapped out if unused, some operating systems do this slowly enough that
it might be an issue. The default stack size is lesser of the
system setting or 1MB.
Replica Sets
Hidden Nodes in Sharded Clusters
In 2.0, mongos instances can now determine when a member of
a replica set becomes “hidden” without requiring a restart. In 1.8,
mongos if you reconfigured a
member as hidden, you had to restart mongos to prevent
queries from reaching the hidden member.
Priorities
Each replica set member can now have a priority value consisting
of a floating-point from 0 to 1000, inclusive. Priorities let you
control which member of the set you prefer to have as primary
the member with the highest priority that can see a majority of the set
will be elected primary.
For example, suppose you have a replica set with three members, A, B, and
C, and suppose that their priorities are set as follows:
- A‘s priority is 2.
- B‘s priority is 3.
- C‘s priority is 1.
During normal operation, the set will always chose B as
primary. If B becomes unavailable, the set will elect A as primary.
For more information, see the Member Priority documentation.
Data-Center Awareness
You can now “tag” replica set members to indicate their
location. You can use these tags to design custom write rules
across data centers, racks, specific servers, or any other architecture
choice.
For example, an administrator can define rules such as “very important write” or
customerData or “audit-trail” to replicate to certain servers,
racks, data centers, etc. Then in the application code, the developer
would say:
db.foo.insert(doc, {w : "very important write"})
which would succeed if it fulfilled the conditions the DBA defined for
“very important write”.
For more information, see
Tagging.
Drivers may also support tag-aware reads. Instead of
specifying slaveOk, you specify slaveOk with tags indicating
which data-centers to read from. For details, see the
驱动程序和客户端 documentation.
w : majority
You can also set w to majority to ensure that the write
propagates to a majority of nodes, effectively committing it. The
value for “majority” will automatically adjust as you add or
remove nodes from the set.
For more information, see 写关注.
Reconfiguration with a Minority Up
If the majority of servers in a set has been permanently lost, you can
now force a reconfiguration of the set to bring it back online.
For more information see 重新配置副本设为不可用的成员.
Primary Checks for a Caught up Secondary before Stepping Down
To minimize time without a primary, the rs.stepDown()
method will now fail if the primary does not see a secondary
within 10 seconds of its latest optime. You can force the primary to
step down anyway, but by default it will return an error message.
See also Force a Member to Become Primary.
Extended Shutdown on the Primary to Minimize Interruption
When you call the shutdown command, the primary
will refuse to shut down unless there is a secondary whose
optime is within 10 seconds of the primary. If such a secondary isn’t
available, the primary will step down and wait up to a minute for the
secondary to be fully caught up before shutting down.
Note that to get this behavior, you must issue the shutdown
command explicitly; sending a signal to the process will not trigger
this behavior.
You can also force the primary to shut down, even without an up-to-date
secondary available.
Maintenance Mode
When repair or compact runs on a secondary, the
secondary will automatically drop into “recovering” mode until the
operation finishes. This prevents clients from trying to read from it
while it’s busy.
Geospatial Features
Multi-Location Documents
Indexing is now supported on documents which have multiple location
objects, embedded either inline or in nested sub-documents. Additional
command options are also supported, allowing results to return with
not only distance but the location used to generate the distance.
For more information, see Multi-location Documents.
Polygon searches
Polygonal $within queries are also now supported for simple polygon
shapes. For details, see the $within operator documentation.
New ContinueOnError Option for Bulk Insert
Set the continueOnError option for bulk inserts, in the
driver, so that bulk insert will
continue to insert any remaining documents even if an insert fails, as
is the case with duplicate key exceptions or network interruptions. The getLastError
command will report whether any inserts have failed, not just the
last one. If multiple errors occur, the client will only receive the
most recent getLastError results.
See OP_INSERT.
注解
For bulk inserts on sharded clusters, the getLastError
command alone is insufficient to verify success. Applications
should must verify the success of bulk inserts in application
logic.
Shell Features
Custom Prompt
You can define a custom prompt for the mongo shell. You can
change the prompt at any time by setting the prompt variable to a string
or a custom JavaScript function returning a string. For examples, see
Custom Prompt.
Default Shell Init Script
On startup, the shell will check for a .mongorc.js file in the
user’s home directory. The shell will execute this file after connecting
to the database and before displaying the prompt.
If you would like the shell not to run the .mongorc.js file
automatically, start the shell with --norc.
For more information, see mongo.