Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Работа с LevelDB
Список форумов
 ->  Работа с базами данных


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
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бит?
_________________
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
hitman249 : 93
Новичок
Откуда: Томск

СообщениеЯнв 13, 2012 8:38 
Ответить с цитатой
Evgenic писал(а):
и как на 64бит?

никак, у меня Win7x86
Ставить x64 пока не собираюсь.
Если есть желание и x64, можете протестировать скрипт приведённый в официальном источнике.
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Evgenic : 1198
Завсегдатай
Откуда: Средняя Волга

СообщениеЯнв 13, 2012 9:10 
Ответить с цитатой
а скомпиленные либы под 64бита есть где? или придется все самостоятельно? у меня для компила с++ нет ничего сейчас.
_________________
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
hitman249 : 93
Новичок
Откуда: Томск

СообщениеЯнв 13, 2012 9:13 
Ответить с цитатой
Цитата:
у меня для компила с++ нет ничего сейчас.

простите где вы видите c++ ?
всё написано на чистой Java Shocked
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Evgenic : 1198
Завсегдатай
Откуда: Средняя Волга

СообщениеЯнв 13, 2012 9:41 
Ответить с цитатой
это разве не оно http://code.google.com/p/leveldb/ ?
а там только с++.
тогда можно несколько уточняющих комментов и ссылку на продукт?
_________________
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
hitman249 : 93
Новичок
Откуда: Томск

СообщениеЯнв 13, 2012 10:05 
Ответить с цитатой
Evgenic, в первом сообщении есть все ссылки на нужные пакеты
помимо либ есть ещё сырцы java, советую использовать именно их
https://github.com/dain/leveldb
а также guava версии только 10.0.1
http://code.google.com/p/guava-libraries/wiki/Release10
ну и по желанию snappy
http://repo1.maven.org/maven2/org/xerial/snappy/snappy-java/1.0.3/
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Работа с базами данных


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru