| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 06, 2012 22:35 |
|
|
Во первых сырцы LevelDB + зависимости (snappy, guava).
Какой-либо информации (примеров) по БД в интернете практически нет.
Собственно ищу примеры если у кого есть. |
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 07, 2012 0:53 |
|
|
| Код: |
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.iq80.leveldb.CompressionType;
import org.iq80.leveldb.DB;
import org.iq80.leveldb.DBFactory;
import org.iq80.leveldb.Options;
import org.iq80.leveldb.impl.Iq80DBFactory;
import org.iq80.leveldb.util.FileUtils;
public static byte[] bytes(String value) {
if( value == null) {
return null;
}
try {
return value.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws IOException {
String namedb = "leveldb";
File databaseDir = FileUtils.createTempDir(namedb);
DBFactory factory = Iq80DBFactory.factory;
File rc = new File(databaseDir, namedb);
Options options = new Options().createIfMissing(true).compressionType(CompressionType.NONE);
//Открываю файл БД и вношу одну запись
DB db = factory.open(rc, options); //эксепшен вылетает здесь!
db.put(bytes("key"), bytes("value"));
System.out.println(databaseDir);
System.out.println(db.get(bytes("key")));
}
|
Это через leveldb api
| Код: |
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.maximumSize(I)Lcom/google/common/cache/CacheBuilder;
at org.iq80.leveldb.impl.TableCache.<init>(TableCache.java:50)
at org.iq80.leveldb.impl.DbImpl.<init>(DbImpl.java:134)
... |
|
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 08, 2012 0:21 |
|
|
Не могу понять как создать и открыть БД.
Есть примеры только на других языках.
Sample
C
C++
NodeJS |
|
|
|
 |
Mam(O)n : 61 Новичок
|
Янв 08, 2012 9:56 |
|
|
| hitman249 писал(а): |
[code]import java.io.File;
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.maximumSize(I)Lcom/google/common/cache/CacheBuilder;
|
Это от того, что используется версия guava новее, чем требует leveldb. |
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 08, 2012 13:26 |
|
|
| Mam(O)n писал(а): |
| Это от того, что используется версия guava новее, чем требует leveldb. |
Ты оказался прав!
Подкорректировал версии либ по этому документу и заработало! |
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 08, 2012 22:05 |
|
|
Теперь заношу данные в таблицу одной сессией и примерно на достижении 21692085 (каждый раз по разному) записей или весе БД 0,98 ГБ (почемуто каждый раз как его значение приближается к 1 гигу) БД глохнет.
| Код: |
java.lang.RuntimeException: Could not open table 2700
at org.iq80.leveldb.impl.TableCache.getTable(TableCache.java:95)
at org.iq80.leveldb.impl.TableCache.newIterator(TableCache.java:77)
at org.iq80.leveldb.impl.DbImpl.finishCompactionOutputFile(DbImpl.java:1112)
at org.iq80.leveldb.impl.DbImpl.doCompactionWork(DbImpl.java:1035)
at org.iq80.leveldb.impl.DbImpl.backgroundCompaction(DbImpl.java:444)
at org.iq80.leveldb.impl.DbImpl.backgroundCall(DbImpl.java:395)
at org.iq80.leveldb.impl.DbImpl.access$100(DbImpl.java:79)
at org.iq80.leveldb.impl.DbImpl$2.call(DbImpl.java:370)
at org.iq80.leveldb.impl.DbImpl$2.call(DbImpl.java:364)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:849)
at org.iq80.leveldb.table.Table.<init>(Table.java:63)
at org.iq80.leveldb.impl.TableCache$TableAndFile.<init>(TableCache.java:118)
at org.iq80.leveldb.impl.TableCache$TableAndFile.<init>(TableCache.java:105)
at org.iq80.leveldb.impl.TableCache$1.load(TableCache.java:65)
at org.iq80.leveldb.impl.TableCache$1.load(TableCache.java:61)
at com.google.common.cache.CustomConcurrentHashMap$ComputingValueReference.compute(CustomConcurrentHashMap.java:3426)
at com.google.common.cache.CustomConcurrentHashMap$Segment.compute(CustomConcurrentHashMap.java:2322)
at com.google.common.cache.CustomConcurrentHashMap$Segment.getOrCompute(CustomConcurrentHashMap.java:2291)
at com.google.common.cache.CustomConcurrentHashMap.getOrCompute(CustomConcurrentHashMap.java:3802)
at com.google.common.cache.ComputingCache.get(ComputingCache.java:46)
at org.iq80.leveldb.impl.TableCache.getTable(TableCache.java:88)
... 13 more
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:846)
... 24 more
java.lang.RuntimeException: Could not open table 2702
at org.iq80.leveldb.impl.TableCache.getTable(TableCache.java:95)
at org.iq80.leveldb.impl.TableCache.newIterator(TableCache.java:77)
at org.iq80.leveldb.impl.TableCache.newIterator(TableCache.java:72)
at org.iq80.leveldb.impl.DbImpl.buildTable(DbImpl.java:936)
at org.iq80.leveldb.impl.DbImpl.writeLevel0Table(DbImpl.java:881)
at org.iq80.leveldb.impl.DbImpl.compactMemTableInternal(DbImpl.java:847)
at org.iq80.leveldb.impl.DbImpl.backgroundCompaction(DbImpl.java:421)
at org.iq80.leveldb.impl.DbImpl.backgroundCall(DbImpl.java:395)
at org.iq80.leveldb.impl.DbImpl.access$100(DbImpl.java:79)
at org.iq80.leveldb.impl.DbImpl$2.call(DbImpl.java:370)
at org.iq80.leveldb.impl.DbImpl$2.call(DbImpl.java:364)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:849)
at org.iq80.leveldb.table.Table.<init>(Table.java:63)
at org.iq80.leveldb.impl.TableCache$TableAndFile.<init>(TableCache.java:118)
at org.iq80.leveldb.impl.TableCache$TableAndFile.<init>(TableCache.java:105)
at org.iq80.leveldb.impl.TableCache$1.load(TableCache.java:65)
at org.iq80.leveldb.impl.TableCache$1.load(TableCache.java:61)
at com.google.common.cache.CustomConcurrentHashMap$ComputingValueReference.compute(CustomConcurrentHashMap.java:3426)
at com.google.common.cache.CustomConcurrentHashMap$Segment.compute(CustomConcurrentHashMap.java:2322)
at com.google.common.cache.CustomConcurrentHashMap$Segment.getOrCompute(CustomConcurrentHashMap.java:2291)
at com.google.common.cache.CustomConcurrentHashMap.getOrCompute(CustomConcurrentHashMap.java:3802)
at com.google.common.cache.ComputingCache.get(ComputingCache.java:46)
at org.iq80.leveldb.impl.TableCache.getTable(TableCache.java:88)
... 15 more
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:846)
... 26 more |
|
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 09, 2012 0:24 |
|
|
решил периодически закрывать и открывать БД заново
| Код: |
db.close();
db = factory.open(rc, options); |
получаю
| Код: |
Exception in thread "main" java.io.FileNotFoundException: leveldb\db\000009.sst (Запрошенную операцию нельзя выполнить для файла с открытой пользователем сопоставленной секцией)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
at org.iq80.leveldb.impl.DbImpl.buildTable(DbImpl.java:909)
at org.iq80.leveldb.impl.DbImpl.writeLevel0Table(DbImpl.java:881)
at org.iq80.leveldb.impl.DbImpl.recoverLogFile(DbImpl.java:511)
at org.iq80.leveldb.impl.DbImpl.<init>(DbImpl.java:188)
at org.iq80.leveldb.impl.Iq80DBFactory.open(Iq80DBFactory.java:37)
at com.adasm.Hash.main(Hash.java:93)
Java Result: 1 |
|
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 10, 2012 9:13 |
|
|
| Код: |
db.close();
TimeUnit.SECONDS.sleep(10);
db = factory.open(rc, options); |
из размышлений что БД не успевает закрыться, добавил таймаут (хотя такого нет в примере, там команды идут друг за другом)
пробовал выставлять до нескольких минут, результата 0.
в итоге таже ошибка
| Код: |
| Exception in thread "main" java.io.FileNotFoundException: leveldb\db\000009.sst (Запрошенную операцию нельзя выполнить для файла с открытой пользователем сопоставленной секцией) |
|
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 13, 2012 6:38 |
|
|
|
|
|
|
 |
Evgenic : 1198 Завсегдатай Откуда: Средняя Волга
|
Янв 13, 2012 7:44 |
|
|
и как на 64бит? _________________
 |
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 13, 2012 8:38 |
|
|
| Evgenic писал(а): |
| и как на 64бит? |
никак, у меня Win7x86
Ставить x64 пока не собираюсь.
Если есть желание и x64, можете протестировать скрипт приведённый в официальном источнике. |
|
|
|
 |
Evgenic : 1198 Завсегдатай Откуда: Средняя Волга
|
Янв 13, 2012 9:10 |
|
|
а скомпиленные либы под 64бита есть где? или придется все самостоятельно? у меня для компила с++ нет ничего сейчас. _________________
 |
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 13, 2012 9:13 |
|
|
| Цитата: |
| у меня для компила с++ нет ничего сейчас. |
простите где вы видите c++ ?
всё написано на чистой Java  |
|
|
|
 |
Evgenic : 1198 Завсегдатай Откуда: Средняя Волга
|
Янв 13, 2012 9:41 |
|
|
|
|
|
|
 |
hitman249 : 93 Новичок Откуда: Томск
|
Янв 13, 2012 10:05 |
|
|
|
|
|
|
 |
|
|