Comments (5)
@ajkr Thanks for your answer.
If implementing it in application code, you would probably implement an Iterator subclass that wraps a RocksDB iterator, and you can make the wrapper's Valid() == false as needed
It works well for me.
from rocksdb.
Do you mean Refresh()
? I don't see a function on Iterator
called Reset()
.
edit: ah sorry you are referring to the Reset()
that it inherits from Cleanable
. Let me rethink it.
from rocksdb.
Probably we should prohibit users from calling Cleanable::Reset()
on an Iterator
. I can't think of a reason to call it - is there one? The following patch would prevent it, though I don't really want to add four friend class
es to Iterator
, so would be glad to see any improvement on that -
diff --git a/include/rocksdb/iterator.h b/include/rocksdb/iterator.h
index e90b887b1..11c48e8be 100644
--- a/include/rocksdb/iterator.h
+++ b/include/rocksdb/iterator.h
@@ -27,7 +27,7 @@
namespace ROCKSDB_NAMESPACE {
-class Iterator : public Cleanable {
+class Iterator : protected Cleanable {
public:
Iterator() {}
// No copying allowed
@@ -152,6 +152,11 @@ class Iterator : public Cleanable {
assert(false);
return Slice();
}
+
+ friend class WriteUnpreparedTxn;
+ friend class WriteUnpreparedTxnDB;
+ friend class WritePreparedTxn;
+ friend class WritePreparedTxnDB;
};
// Return an empty iterator (yields nothing).
from rocksdb.
@ajkr Thanks for your reply.
Probably we should prohibit users from calling Cleanable::Reset() on an Iterator.
In our scenario, we want to make the iterator invalid if it mismatches the prefix. But it seems there is no way to do that for now, so I tried Reset()
and found it just cleans up some resources. It makes sense to me if the Reset is only used for cleaning up the iterator.
from rocksdb.
the iterator invalid if it mismatches the prefix
RocksDB can do it for you if you have a prefix_extractor
configured, and you set ReadOptions::prefix_same_as_start
. There's some read-amp optimizations too when RocksDB has awareness that scanning never needs to visit another prefix.
If implementing it in application code, you would probably implement an Iterator
subclass that wraps a RocksDB iterator, and you can make the wrapper's Valid() == false
as needed
from rocksdb.
Related Issues (20)
- RocksJava - Options cannot be instantiated directly HOT 1
- Opening LevelDB with corrupted MANIFEST-0* file HOT 6
- when to use checkpoint vs opening rocksdb in read only mode HOT 4
- CancelAllBackgroundWork: Flush of unpersisted data waits for stall conditions to clear and delays db close HOT 2
- Installation documentation for OSX is out of date HOT 3
- ArenaTest.UnmappedAllocation fails when "transparent hugepage" is enabled.
- API request: SeekForBase
- Master branch unable to find zstd HOT 1
- RocksDB crashing when doing simple get HOT 5
- unexplained sudden increase in memory usage HOT 14
- DirectIO WAL Write does not honor DBOptions.use_fsync HOT 2
- New LZ4 encoding HOT 1
- release 8.10.2 on maven central HOT 1
- tailing iterator ambiguity
- When run in two consecutive times DB::Open has quite different time cost HOT 2
- Is it possible to make the db.get operation after db.close without exception? HOT 3
- Feature Request: Graceful upgrade
- There is an error when I am compilling rocksDB version above 8.10.0 with zenFS 2.1.4 HOT 1
- Doc bug: CustomFilterPolicy example
- Feature request: check if prefix exists without seeking HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rocksdb.