提交 5d9a00a9 authored 作者: Thomas Mueller's avatar Thomas Mueller

MVStore: rename pageSize to pageSplitSize

上级 54c3fc72
......@@ -125,7 +125,7 @@ public class MVMap<K, V> extends AbstractMap<K, V>
* @return the new sibling
*/
protected Page splitRootIfNeeded(Page p, long writeVersion) {
if (p.getMemory() <= store.getPageSize() || p.getKeyCount() <= 1) {
if (p.getMemory() <= store.getPageSplitSize() || p.getKeyCount() <= 1) {
return p;
}
int at = p.getKeyCount() / 2;
......@@ -167,7 +167,7 @@ public class MVMap<K, V> extends AbstractMap<K, V>
index++;
}
Page c = copyOnWrite(p.getChildPage(index), writeVersion);
if (c.getMemory() > store.getPageSize() && c.getKeyCount() > 1) {
if (c.getMemory() > store.getPageSplitSize() && c.getKeyCount() > 1) {
// split on the way down
int at = c.getKeyCount() / 2;
Object k = c.getKey(at);
......
......@@ -51,7 +51,7 @@ TestMVStoreDataLoss
TransactionStore:
MVStore:
- rolling docs review: at "Features"
- rolling docs review: at "Transactions"
- move setters to the builder, except for setRetainVersion, setReuseSpace,
and settings that are persistent (setStoreVersion)
- automated 'kill process' and 'power failure' test
......@@ -107,8 +107,10 @@ MVStore:
- autocommit (to avoid having to call commit,
as it could be called too often or it is easily forgotten)
- remove features that are not really needed; simplify the code
possibly using a layering / tool mechanism
- rename "store" to "save", as store collides with storeVersion
possibly using a separate layer or tools
- rename "store" to "save", as "store" is used in "storeVersion"
- MVStoreTool.dump should dump the data if possible;
possibly using a callback for serialization
*/
......@@ -141,7 +143,7 @@ public class MVStore {
private final String fileName;
private final char[] filePassword;
private final int pageSize;
private final int pageSplitSize;
private FileChannel file;
private FileLock fileLock;
......@@ -250,15 +252,15 @@ public class MVStore {
this.fileName = f;
this.readOnly = config.containsKey("readOnly");
this.compress = config.containsKey("compress");
Object o = config.get("pageSize");
pageSize = o == null ? 6 * 1024 : (Integer) o;
Object o = config.get("pageSplitSize");
pageSplitSize = o == null ? 6 * 1024 : (Integer) o;
o = config.get("backgroundExceptionListener");
this.backgroundExceptionListener = (ExceptionListener) o;
if (fileName != null) {
o = config.get("cacheSize");
int mb = o == null ? 16 : (Integer) o;
int maxMemoryBytes = mb * 1024 * 1024;
int averageMemory = pageSize / 2;
int averageMemory = pageSplitSize / 2;
int segmentCount = 16;
int stackMoveDistance = maxMemoryBytes / averageMemory * 2 / 100;
cache = new CacheLongKeyLIRS<Page>(
......@@ -267,7 +269,7 @@ public class MVStore {
o = config.get("writeBufferSize");
mb = o == null ? 4 : (Integer) o;
int writeBufferSize = mb * 1024 * 1024;
maxUnsavedPages = writeBufferSize / pageSize;
maxUnsavedPages = writeBufferSize / pageSplitSize;
o = config.get("writeDelay");
writeDelay = o == null ? 1000 : (Integer) o;
} else {
......@@ -742,14 +744,14 @@ public class MVStore {
if (closed) {
return;
}
closed = true;
if (file == null) {
return;
}
// can not synchronize on this yet, because
// the thread also synchronized on this, which
// could result in a deadlock
stopBackgroundThread();
closed = true;
if (file == null) {
return;
}
synchronized (this) {
try {
if (shrinkIfPossible) {
......@@ -1408,8 +1410,8 @@ public class MVStore {
return compress;
}
public int getPageSize() {
return pageSize;
public int getPageSplitSize() {
return pageSplitSize;
}
public boolean getReuseSpace() {
......@@ -2027,15 +2029,16 @@ public class MVStore {
}
/**
* Set the amount of memory a page should contain at most, in bytes. Larger
* pages are split. The default is 6 KB. This is not a limit in the page
* size (pages with one entry can get larger), it is just the point where
* pages are split.
* Set the amount of memory a page should contain at most, in bytes,
* before it is split. The default is 6 KB. This is not a limit in the
* page size, as pages with one entry can get larger. It is just the
* point where pages that contain more than one entry are split.
*
* @param pageSize the page size
* @param pageSplitSize the page size
* @return this
*/
public Builder pageSize(int pageSize) {
return set("pageSize", pageSize);
public Builder pageSplitSize(int pageSplitSize) {
return set("pageSplitSize", pageSplitSize);
}
/**
......@@ -2043,6 +2046,7 @@ public class MVStore {
* thread.
*
* @param backgroundExceptionListener the listener
* @return this
*/
public Builder backgroundExceptionListener(
ExceptionListener backgroundExceptionListener) {
......
......@@ -227,9 +227,9 @@ public class MVRTreeMap<V> extends MVMap<SpatialKey, V> {
Page p = copyOnWrite(root, v);
Object result;
if (alwaysAdd || get(key) == null) {
if (p.getMemory() > store.getPageSize() && p.getKeyCount() > 1) {
if (p.getMemory() > store.getPageSplitSize() && p.getKeyCount() > 1) {
// only possible if this is the root, else we would have split earlier
// (this requires maxPageSize is fixed)
// (this requires pageSplitSize is fixed)
long totalCount = p.getTotalCount();
Page split = split(p, v);
Object k1 = getBounds(p);
......@@ -313,7 +313,7 @@ public class MVRTreeMap<V> extends MVMap<SpatialKey, V> {
}
}
Page c = copyOnWrite(p.getChildPage(index), writeVersion);
if (c.getMemory() > store.getPageSize() && c.getKeyCount() > 1) {
if (c.getMemory() > store.getPageSplitSize() && c.getKeyCount() > 1) {
// split on the way down
Page split = split(c, writeVersion);
p = copyOnWrite(p, writeVersion);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论