Update docu about the bytes and unicode
This commit is contained in:
parent
79e8f5da8c
commit
828be96dba
4 changed files with 96 additions and 102 deletions
|
@ -20,8 +20,8 @@ Database object
|
||||||
|
|
||||||
Set the database entry for "key" to "value".
|
Set the database entry for "key" to "value".
|
||||||
|
|
||||||
:param string key: Name for this entry
|
:param bytes key: Name for this entry
|
||||||
:param string value: Data for this entry
|
:param bytes value: Data for this entry
|
||||||
:param bool sync:
|
:param bool sync:
|
||||||
If ``True``, the write will be flushed from the operating system
|
If ``True``, the write will be flushed from the operating system
|
||||||
buffer cache (by calling WritableFile::Sync()) before the write
|
buffer cache (by calling WritableFile::Sync()) before the write
|
||||||
|
@ -46,7 +46,7 @@ Database object
|
||||||
|
|
||||||
Remove the database entry for "key".
|
Remove the database entry for "key".
|
||||||
|
|
||||||
:param string key: Name to delete
|
:param bytes key: Name to delete
|
||||||
:param sync: See :py:meth:`rocksdb.DB.put`
|
:param sync: See :py:meth:`rocksdb.DB.put`
|
||||||
:param disable_wal: See :py:meth:`rocksdb.DB.put`
|
:param disable_wal: See :py:meth:`rocksdb.DB.put`
|
||||||
:raises rocksdb.errors.NotFound: If the key did not exists
|
:raises rocksdb.errors.NotFound: If the key did not exists
|
||||||
|
@ -74,7 +74,7 @@ Database object
|
||||||
|
|
||||||
.. py:method:: get(key, verify_checksums=False, fill_cache=True, prefix_seek=False, snapshot=None, read_tier="all")
|
.. py:method:: get(key, verify_checksums=False, fill_cache=True, prefix_seek=False, snapshot=None, read_tier="all")
|
||||||
|
|
||||||
:param string key: Name to get
|
:param bytes key: Name to get
|
||||||
|
|
||||||
:param bool verify_checksums:
|
:param bool verify_checksums:
|
||||||
If ``True``, all data read from underlying storage will be
|
If ``True``, all data read from underlying storage will be
|
||||||
|
@ -110,12 +110,12 @@ Database object
|
||||||
.. py:method:: multi_get(keys, verify_checksums=False, fill_cache=True, prefix_seek=False, snapshot=None, read_tier="all")
|
.. py:method:: multi_get(keys, verify_checksums=False, fill_cache=True, prefix_seek=False, snapshot=None, read_tier="all")
|
||||||
|
|
||||||
:param keys: Keys to fetch
|
:param keys: Keys to fetch
|
||||||
:type keys: list of strings
|
:type keys: list of bytes
|
||||||
|
|
||||||
For the other params see :py:meth:`rocksdb.DB.get`
|
For the other params see :py:meth:`rocksdb.DB.get`
|
||||||
|
|
||||||
:returns:
|
:returns:
|
||||||
A ``dict`` where the value is either ``string`` or ``None`` if not found
|
A ``dict`` where the value is either ``bytes`` or ``None`` if not found
|
||||||
|
|
||||||
:raises: If the fetch for a single key fails
|
:raises: If the fetch for a single key fails
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ Database object
|
||||||
This check is potentially lighter-weight than invoking DB::get().
|
This check is potentially lighter-weight than invoking DB::get().
|
||||||
One way to make this lighter weight is to avoid doing any IOs.
|
One way to make this lighter weight is to avoid doing any IOs.
|
||||||
|
|
||||||
:param string key: Key to check
|
:param bytes key: Key to check
|
||||||
:param bool fetch: Obtain also the value if found
|
:param bool fetch: Obtain also the value if found
|
||||||
|
|
||||||
For the other params see :py:meth:`rocksdb.DB.get`
|
For the other params see :py:meth:`rocksdb.DB.get`
|
||||||
|
@ -146,7 +146,7 @@ Database object
|
||||||
|
|
||||||
Iterate over the keys
|
Iterate over the keys
|
||||||
|
|
||||||
:param string prefix: Not implemented yet
|
:param bytes prefix: Not implemented yet
|
||||||
|
|
||||||
For other params see :py:meth:`rocksdb.DB.get`
|
For other params see :py:meth:`rocksdb.DB.get`
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ Database object
|
||||||
|
|
||||||
Iterate over the values
|
Iterate over the values
|
||||||
|
|
||||||
:param string prefix: Not implemented yet
|
:param bytes prefix: Not implemented yet
|
||||||
|
|
||||||
For other params see :py:meth:`rocksdb.DB.get`
|
For other params see :py:meth:`rocksdb.DB.get`
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ Database object
|
||||||
|
|
||||||
Iterate over the items
|
Iterate over the items
|
||||||
|
|
||||||
:param string prefix: Not implemented yet
|
:param bytes prefix: Not implemented yet
|
||||||
|
|
||||||
For other params see :py:meth:`rocksdb.DB.get`
|
For other params see :py:meth:`rocksdb.DB.get`
|
||||||
|
|
||||||
|
@ -197,18 +197,18 @@ Database object
|
||||||
|
|
||||||
DB implementations can export properties about their state
|
DB implementations can export properties about their state
|
||||||
via this method. If "property" is a valid property understood by this
|
via this method. If "property" is a valid property understood by this
|
||||||
DB implementation, a string with its value is returned.
|
DB implementation, a byte string with its value is returned.
|
||||||
Otherwise ``None``
|
Otherwise ``None``
|
||||||
|
|
||||||
Valid property names include:
|
Valid property names include:
|
||||||
|
|
||||||
* ``"rocksdb.num-files-at-level<N>"``: return the number of files at level <N>,
|
* ``b"rocksdb.num-files-at-level<N>"``: return the number of files at level <N>,
|
||||||
where <N> is an ASCII representation of a level number (e.g. "0").
|
where <N> is an ASCII representation of a level number (e.g. "0").
|
||||||
|
|
||||||
* ``"rocksdb.stats"``: returns a multi-line string that describes statistics
|
* ``b"rocksdb.stats"``: returns a multi-line byte string that describes statistics
|
||||||
about the internal operation of the DB.
|
about the internal operation of the DB.
|
||||||
|
|
||||||
* ``"rocksdb.sstables"``: returns a multi-line string that describes all
|
* ``b"rocksdb.sstables"``: returns a multi-line byte string that describes all
|
||||||
of the sstables that make up the db contents.
|
of the sstables that make up the db contents.
|
||||||
|
|
||||||
.. py:method:: get_live_files_metadata()
|
.. py:method:: get_live_files_metadata()
|
||||||
|
@ -265,7 +265,7 @@ Iterator
|
||||||
|
|
||||||
.. py:method:: seek(key)
|
.. py:method:: seek(key)
|
||||||
|
|
||||||
:param string key: Position at the first key in the source that at or past
|
:param bytes key: Position at the first key in the source that at or past
|
||||||
|
|
||||||
Methods to support the python iterator protocol
|
Methods to support the python iterator protocol
|
||||||
|
|
||||||
|
@ -294,16 +294,16 @@ WriteBatch
|
||||||
after the following batch is written::
|
after the following batch is written::
|
||||||
|
|
||||||
batch = rocksdb.WriteBatch()
|
batch = rocksdb.WriteBatch()
|
||||||
batch.put("key", "v1")
|
batch.put(b"key", b"v1")
|
||||||
batch.delete("key")
|
batch.delete(b"key")
|
||||||
batch.put("key", "v2")
|
batch.put(b"key", b"v2")
|
||||||
batch.put("key", "v3")
|
batch.put(b"key", b"v3")
|
||||||
|
|
||||||
.. py:method:: __init__(data=None)
|
.. py:method:: __init__(data=None)
|
||||||
|
|
||||||
Creates a WriteBatch.
|
Creates a WriteBatch.
|
||||||
|
|
||||||
:param string data:
|
:param bytes data:
|
||||||
A serialized version of a previous WriteBatch. As retrieved
|
A serialized version of a previous WriteBatch. As retrieved
|
||||||
from a previous .data() call. If ``None`` a empty WriteBatch is
|
from a previous .data() call. If ``None`` a empty WriteBatch is
|
||||||
generated
|
generated
|
||||||
|
@ -312,21 +312,21 @@ WriteBatch
|
||||||
|
|
||||||
Store the mapping "key->value" in the database.
|
Store the mapping "key->value" in the database.
|
||||||
|
|
||||||
:param string key: Name of the entry to store
|
:param bytes key: Name of the entry to store
|
||||||
:param string value: Data of this entry
|
:param bytes value: Data of this entry
|
||||||
|
|
||||||
.. py:method:: merge(key, value)
|
.. py:method:: merge(key, value)
|
||||||
|
|
||||||
Merge "value" with the existing value of "key" in the database.
|
Merge "value" with the existing value of "key" in the database.
|
||||||
|
|
||||||
:param string key: Name of the entry to merge
|
:param bytes key: Name of the entry to merge
|
||||||
:param string value: Data to merge
|
:param bytes value: Data to merge
|
||||||
|
|
||||||
.. py:method:: delete(key)
|
.. py:method:: delete(key)
|
||||||
|
|
||||||
If the database contains a mapping for "key", erase it. Else do nothing.
|
If the database contains a mapping for "key", erase it. Else do nothing.
|
||||||
|
|
||||||
:param string key: Key to erase
|
:param bytes key: Key to erase
|
||||||
|
|
||||||
.. py:method:: clear()
|
.. py:method:: clear()
|
||||||
|
|
||||||
|
@ -336,7 +336,7 @@ WriteBatch
|
||||||
|
|
||||||
Retrieve the serialized version of this batch.
|
Retrieve the serialized version of this batch.
|
||||||
|
|
||||||
:rtype: string
|
:rtype: ``bytes``
|
||||||
|
|
||||||
.. py:method:: count()
|
.. py:method:: count()
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ Comparator
|
||||||
|
|
||||||
Three-way comparison.
|
Three-way comparison.
|
||||||
|
|
||||||
:param string a: First field to compare
|
:param bytes a: First field to compare
|
||||||
:param string b: Second field to compare
|
:param bytes b: Second field to compare
|
||||||
:returns: * -1 if a < b
|
:returns: * -1 if a < b
|
||||||
* 0 if a == b
|
* 0 if a == b
|
||||||
* 1 if a > b
|
* 1 if a > b
|
||||||
|
@ -35,7 +35,7 @@ Comparator
|
||||||
Names starting with "rocksdb." are reserved and should not be used
|
Names starting with "rocksdb." are reserved and should not be used
|
||||||
by any clients of this package.
|
by any clients of this package.
|
||||||
|
|
||||||
:rtype: ``string``
|
:rtype: ``bytes``
|
||||||
|
|
||||||
Merge Operator
|
Merge Operator
|
||||||
==============
|
==============
|
||||||
|
@ -75,11 +75,11 @@ AssociativeMergeOperator
|
||||||
|
|
||||||
Gives the client a way to express the read -> modify -> write semantics
|
Gives the client a way to express the read -> modify -> write semantics
|
||||||
|
|
||||||
:param string key: The key that's associated with this merge operation
|
:param bytes key: The key that's associated with this merge operation
|
||||||
:param string existing_value: The current value in the db.
|
:param bytes existing_value: The current value in the db.
|
||||||
``None`` indicates the key does not exist
|
``None`` indicates the key does not exist
|
||||||
before this op
|
before this op
|
||||||
:param string value: The value to update/merge the existing_value with
|
:param bytes value: The value to update/merge the existing_value with
|
||||||
|
|
||||||
:returns: ``True`` and the new value on success.
|
:returns: ``True`` and the new value on success.
|
||||||
All values passed in will be client-specific values.
|
All values passed in will be client-specific values.
|
||||||
|
@ -88,7 +88,7 @@ AssociativeMergeOperator
|
||||||
The client should assume that this will be treated as an
|
The client should assume that this will be treated as an
|
||||||
error by the library.
|
error by the library.
|
||||||
|
|
||||||
:rtype: ``(bool, string)``
|
:rtype: ``(bool, bytes)``
|
||||||
|
|
||||||
.. py:method:: name()
|
.. py:method:: name()
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ AssociativeMergeOperator
|
||||||
For example a DB created with one MergeOperator is accessed using a
|
For example a DB created with one MergeOperator is accessed using a
|
||||||
different MergeOperator.
|
different MergeOperator.
|
||||||
|
|
||||||
:rtype: ``string``
|
:rtype: ``bytes``
|
||||||
|
|
||||||
MergeOperator
|
MergeOperator
|
||||||
-------------
|
-------------
|
||||||
|
@ -104,21 +104,21 @@ MergeOperator
|
||||||
.. py:class:: rocksdb.interfaces.MergeOperator
|
.. py:class:: rocksdb.interfaces.MergeOperator
|
||||||
|
|
||||||
.. py:method:: full_merge(key, existing_value, operand_list)
|
.. py:method:: full_merge(key, existing_value, operand_list)
|
||||||
|
|
||||||
Gives the client a way to express the read -> modify -> write semantics
|
Gives the client a way to express the read -> modify -> write semantics
|
||||||
|
|
||||||
:param string key: The key that's associated with this merge operation.
|
:param bytes key: The key that's associated with this merge operation.
|
||||||
Client could multiplex the merge operator based on it
|
Client could multiplex the merge operator based on it
|
||||||
if the key space is partitioned and different subspaces
|
if the key space is partitioned and different subspaces
|
||||||
refer to different types of data which have different
|
refer to different types of data which have different
|
||||||
merge operation semantics
|
merge operation semantics
|
||||||
|
|
||||||
:param string existing_value: The current value in the db.
|
:param bytes existing_value: The current value in the db.
|
||||||
``None`` indicates the key does not exist
|
``None`` indicates the key does not exist
|
||||||
before this op
|
before this op
|
||||||
|
|
||||||
:param operand_list: The sequence of merge operations to apply.
|
:param operand_list: The sequence of merge operations to apply.
|
||||||
:type operand_list: list of strings
|
:type operand_list: list of bytes
|
||||||
|
|
||||||
:returns: ``True`` and the new value on success.
|
:returns: ``True`` and the new value on success.
|
||||||
All values passed in will be client-specific values.
|
All values passed in will be client-specific values.
|
||||||
|
@ -127,7 +127,7 @@ MergeOperator
|
||||||
The client should assume that this will be treated as an
|
The client should assume that this will be treated as an
|
||||||
error by the library.
|
error by the library.
|
||||||
|
|
||||||
:rtype: ``(bool, string)``
|
:rtype: ``(bool, bytes)``
|
||||||
|
|
||||||
.. py:method:: partial_merge(key, left_operand, right_operand)
|
.. py:method:: partial_merge(key, left_operand, right_operand)
|
||||||
|
|
||||||
|
@ -147,10 +147,10 @@ MergeOperator
|
||||||
operations, and apply them in the correct order once a base-value
|
operations, and apply them in the correct order once a base-value
|
||||||
(a Put/Delete/End-of-Database) is seen.
|
(a Put/Delete/End-of-Database) is seen.
|
||||||
|
|
||||||
:param string key: the key that is associated with this merge operation.
|
:param bytes key: the key that is associated with this merge operation.
|
||||||
:param string left_operand: First operand to merge
|
:param bytes left_operand: First operand to merge
|
||||||
:param string right_operand: Second operand to merge
|
:param bytes right_operand: Second operand to merge
|
||||||
:rtype: ``(bool, string)``
|
:rtype: ``(bool, bytes)``
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ MergeOperator
|
||||||
For example a DB created with one MergeOperator is accessed using a
|
For example a DB created with one MergeOperator is accessed using a
|
||||||
different MergeOperator.
|
different MergeOperator.
|
||||||
|
|
||||||
:rtype: ``string``
|
:rtype: ``bytes``
|
||||||
|
|
||||||
FilterPolicy
|
FilterPolicy
|
||||||
============
|
============
|
||||||
|
@ -180,17 +180,17 @@ FilterPolicy
|
||||||
:param keys: list of keys (potentially with duplicates)
|
:param keys: list of keys (potentially with duplicates)
|
||||||
that are ordered according to the user supplied
|
that are ordered according to the user supplied
|
||||||
comparator.
|
comparator.
|
||||||
:type keys: list of strings
|
:type keys: list of bytes
|
||||||
|
|
||||||
:returns: A filter that summarizes keys
|
:returns: A filter that summarizes keys
|
||||||
:rtype: ``string``
|
:rtype: ``bytes``
|
||||||
|
|
||||||
.. py:method:: key_may_match(key, filter)
|
.. py:method:: key_may_match(key, filter)
|
||||||
|
|
||||||
Check if the key is maybe in the filter.
|
Check if the key is maybe in the filter.
|
||||||
|
|
||||||
:param string key: Key for a single entry inside the database
|
:param bytes key: Key for a single entry inside the database
|
||||||
:param string filter: Contains the data returned by a preceding call
|
:param bytes filter: Contains the data returned by a preceding call
|
||||||
to create_filter on this class
|
to create_filter on this class
|
||||||
:returns: This method must return ``True`` if the key was in the list
|
:returns: This method must return ``True`` if the key was in the list
|
||||||
of keys passed to create_filter().
|
of keys passed to create_filter().
|
||||||
|
@ -207,4 +207,4 @@ FilterPolicy
|
||||||
must be changed. Otherwise, old incompatible filters may be
|
must be changed. Otherwise, old incompatible filters may be
|
||||||
passed to methods of this type.
|
passed to methods of this type.
|
||||||
|
|
||||||
:rtype: ``string``
|
:rtype: ``bytes``
|
||||||
|
|
|
@ -7,10 +7,10 @@ Python bindings to the C++ interface of http://rocksdb.org/ using cython::
|
||||||
|
|
||||||
import rocksdb
|
import rocksdb
|
||||||
db = rocksdb.DB("test.db", rocksdb.Options(create_if_missing=True))
|
db = rocksdb.DB("test.db", rocksdb.Options(create_if_missing=True))
|
||||||
db.put("a", "b")
|
db.put(b"a", b"b")
|
||||||
print db.get("a")
|
print db.get(b"a")
|
||||||
|
|
||||||
Tested with python2.7
|
Tested with python2.7 and python3.3
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
@ -23,16 +23,8 @@ Tested with python2.7
|
||||||
RoadMap/TODO
|
RoadMap/TODO
|
||||||
------------
|
------------
|
||||||
|
|
||||||
* Links from tutorial to API pages (for example merge operator)
|
|
||||||
* support python3.3.
|
|
||||||
Make it fix what kind of strings are allow.
|
|
||||||
|
|
||||||
* Arbitrary ``unicode`` and then do some encoding/decoding, like
|
|
||||||
`redis-driver <https://github.com/andymccurdy/redis-py/blob/2.8.0/redis/connection.py#L319>`_
|
|
||||||
|
|
||||||
* Or just ASCII ``bytes`` and let the user handle unicode.
|
|
||||||
|
|
||||||
* support prefix API
|
* support prefix API
|
||||||
|
* Links from tutorial to API pages (for example merge operator)
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
==================
|
==================
|
||||||
|
|
|
@ -27,9 +27,9 @@ A more production ready open can look like this ::
|
||||||
db = rocksdb.DB("test.db", opts)
|
db = rocksdb.DB("test.db", opts)
|
||||||
|
|
||||||
It assings a cache of 2.5G, uses a bloom filter for faster lookups and keeps
|
It assings a cache of 2.5G, uses a bloom filter for faster lookups and keeps
|
||||||
more data (64 MB) in memory before writting a .sst file
|
more data (64 MB) in memory before writting a .sst file.
|
||||||
|
|
||||||
About bytes and unicode
|
About Bytes and Unicode
|
||||||
========================
|
========================
|
||||||
|
|
||||||
RocksDB stores all data as uninterpreted *byte strings*.
|
RocksDB stores all data as uninterpreted *byte strings*.
|
||||||
|
@ -49,8 +49,7 @@ The only place where you can pass unicode objects are filesytem paths like
|
||||||
|
|
||||||
* :py:attr:`rocksdb.Options.db_log_dir`
|
* :py:attr:`rocksdb.Options.db_log_dir`
|
||||||
|
|
||||||
To encode this unicode objects the `sys.getfilesystemencoding()` encoding is used
|
To encode this path name, `sys.getfilesystemencoding()` encoding is used.
|
||||||
|
|
||||||
|
|
||||||
Access
|
Access
|
||||||
======
|
======
|
||||||
|
@ -58,37 +57,37 @@ Access
|
||||||
Store, Get, Delete is straight forward ::
|
Store, Get, Delete is straight forward ::
|
||||||
|
|
||||||
# Store
|
# Store
|
||||||
db.put("key", "value")
|
db.put(b"key", b"value")
|
||||||
|
|
||||||
# Get
|
# Get
|
||||||
db.get("key")
|
db.get(b"key")
|
||||||
|
|
||||||
# Delete
|
# Delete
|
||||||
db.delete("key")
|
db.delete(b"key")
|
||||||
|
|
||||||
It is also possible to gather modifications and
|
It is also possible to gather modifications and
|
||||||
apply them in a single operation ::
|
apply them in a single operation ::
|
||||||
|
|
||||||
batch = rocksdb.WriteBatch()
|
batch = rocksdb.WriteBatch()
|
||||||
batch.put("key", "v1")
|
batch.put(b"key", b"v1")
|
||||||
batch.delete("key")
|
batch.delete(b"key")
|
||||||
batch.put("key", "v2")
|
batch.put(b"key", b"v2")
|
||||||
batch.put("key", "v3")
|
batch.put(b"key", b"v3")
|
||||||
|
|
||||||
db.write(batch)
|
db.write(batch)
|
||||||
|
|
||||||
Fetch of multiple values at once ::
|
Fetch of multiple values at once ::
|
||||||
|
|
||||||
db.put("key1", "v1")
|
db.put(b"key1", b"v1")
|
||||||
db.put("key2", "v2")
|
db.put(b"key2", b"v2")
|
||||||
|
|
||||||
ret = db.multi_get(["key1", "key2", "key3"])
|
ret = db.multi_get([b"key1", b"key2", b"key3"])
|
||||||
|
|
||||||
# prints "v1"
|
# prints b"v1"
|
||||||
print ret["key1"]
|
print ret[b"key1"]
|
||||||
|
|
||||||
# prints None
|
# prints None
|
||||||
print ret["key3"]
|
print ret[b"key3"]
|
||||||
|
|
||||||
Iteration
|
Iteration
|
||||||
=========
|
=========
|
||||||
|
@ -96,22 +95,22 @@ Iteration
|
||||||
Iterators behave slightly different than expected. Per default they are not
|
Iterators behave slightly different than expected. Per default they are not
|
||||||
valid. So you have to call one of its seek methods first ::
|
valid. So you have to call one of its seek methods first ::
|
||||||
|
|
||||||
db.put("key1", "v1")
|
db.put(b"key1", b"v1")
|
||||||
db.put("key2", "v2")
|
db.put(b"key2", b"v2")
|
||||||
db.put("key3", "v3")
|
db.put(b"key3", b"v3")
|
||||||
|
|
||||||
it = db.iterkeys()
|
it = db.iterkeys()
|
||||||
it.seek_to_first()
|
it.seek_to_first()
|
||||||
|
|
||||||
# prints ['key1', 'key2', 'key3']
|
# prints [b'key1', b'key2', b'key3']
|
||||||
print list(it)
|
print list(it)
|
||||||
|
|
||||||
it.seek_to_last()
|
it.seek_to_last()
|
||||||
# prints ['key3']
|
# prints [b'key3']
|
||||||
print list(it)
|
print list(it)
|
||||||
|
|
||||||
it.seek('key2')
|
it.seek(b'key2')
|
||||||
# prints ['key2', 'key3']
|
# prints [b'key2', b'key3']
|
||||||
print list(it)
|
print list(it)
|
||||||
|
|
||||||
There are also methods to iterate over values/items ::
|
There are also methods to iterate over values/items ::
|
||||||
|
@ -119,13 +118,13 @@ There are also methods to iterate over values/items ::
|
||||||
it = db.itervalues()
|
it = db.itervalues()
|
||||||
it.seek_to_first()
|
it.seek_to_first()
|
||||||
|
|
||||||
# prints ['v1', 'v2', 'v3']
|
# prints [b'v1', b'v2', b'v3']
|
||||||
print list(it)
|
print list(it)
|
||||||
|
|
||||||
it = db.iteritems()
|
it = db.iteritems()
|
||||||
it.seek_to_first()
|
it.seek_to_first()
|
||||||
|
|
||||||
# prints [('key1', 'v1'), ('key2, 'v2'), ('key3', 'v3')]
|
# prints [(b'key1', b'v1'), (b'key2, b'v2'), (b'key3', b'v3')]
|
||||||
print list(it)
|
print list(it)
|
||||||
|
|
||||||
Reversed iteration ::
|
Reversed iteration ::
|
||||||
|
@ -133,7 +132,7 @@ Reversed iteration ::
|
||||||
it = db.iteritems()
|
it = db.iteritems()
|
||||||
it.seek_to_last()
|
it.seek_to_last()
|
||||||
|
|
||||||
# prints [('key3', 'v3'), ('key2', 'v2'), ('key1', 'v1')]
|
# prints [(b'key3', b'v3'), (b'key2', b'v2'), (b'key1', b'v1')]
|
||||||
print list(reversed(it))
|
print list(reversed(it))
|
||||||
|
|
||||||
|
|
||||||
|
@ -142,23 +141,23 @@ Snapshots
|
||||||
|
|
||||||
Snapshots are nice to get a consistent view on the database ::
|
Snapshots are nice to get a consistent view on the database ::
|
||||||
|
|
||||||
self.db.put("a", "1")
|
self.db.put(b"a", b"1")
|
||||||
self.db.put("b", "2")
|
self.db.put(b"b", b"2")
|
||||||
|
|
||||||
snapshot = self.db.snapshot()
|
snapshot = self.db.snapshot()
|
||||||
self.db.put("a", "2")
|
self.db.put(b"a", b"2")
|
||||||
self.db.delete("b")
|
self.db.delete(b"b")
|
||||||
|
|
||||||
it = self.db.iteritems()
|
it = self.db.iteritems()
|
||||||
it.seek_to_first()
|
it.seek_to_first()
|
||||||
|
|
||||||
# prints {'a': '2'}
|
# prints {b'a': b'2'}
|
||||||
print dict(it)
|
print dict(it)
|
||||||
|
|
||||||
it = self.db.iteritems(snapshot=snapshot)
|
it = self.db.iteritems(snapshot=snapshot)
|
||||||
it.seek_to_first()
|
it.seek_to_first()
|
||||||
|
|
||||||
# prints {'a': '1', 'b': '2'}
|
# prints {b'a': b'1', b'b': b'2'}
|
||||||
print dict(it)
|
print dict(it)
|
||||||
|
|
||||||
|
|
||||||
|
@ -172,11 +171,12 @@ The simple Associative merge ::
|
||||||
class AssocCounter(rocksdb.interfaces.AssociativeMergeOperator):
|
class AssocCounter(rocksdb.interfaces.AssociativeMergeOperator):
|
||||||
def merge(self, key, existing_value, value):
|
def merge(self, key, existing_value, value):
|
||||||
if existing_value:
|
if existing_value:
|
||||||
return (True, str(int(existing_value) + int(value)))
|
s = int(existing_value) + int(value)
|
||||||
|
return (True, str(s).encode('ascii'))
|
||||||
return (True, value)
|
return (True, value)
|
||||||
|
|
||||||
def name(self):
|
def name(self):
|
||||||
return 'AssocCounter'
|
return b'AssocCounter'
|
||||||
|
|
||||||
|
|
||||||
opts = rocksdb.Options()
|
opts = rocksdb.Options()
|
||||||
|
@ -184,8 +184,10 @@ The simple Associative merge ::
|
||||||
opts.merge_operator = AssocCounter()
|
opts.merge_operator = AssocCounter()
|
||||||
db = rocksdb.DB('test.db', opts)
|
db = rocksdb.DB('test.db', opts)
|
||||||
|
|
||||||
db.merge("a", "1")
|
db.merge(b"a", b"1")
|
||||||
db.merge("a", "1")
|
db.merge(b"a", b"1")
|
||||||
|
|
||||||
|
# prints b'2'
|
||||||
|
print db.get(b"a")
|
||||||
|
|
||||||
|
|
||||||
# prints '2'
|
|
||||||
print db.get("a")
|
|
||||||
|
|
Loading…
Reference in a new issue