• WiredTiger. Просто взгляд.[update]

    Открыл для себя  WiredTiger. Говорят это очень крутой NoSql мотор, который начали использовать в MongoDb. Решил попробовать и я, для чего прям из примера написал программку.


        WT_CONNECTION *Volume1Connection;
        //    WT_CONNECTION *Volume2Connection;
        WT_CURSOR *cursor;
        WT_SESSION *session;
        const char *key, *value;
        int ret;
    
    
        if ((ret = wiredtiger_open("./Volume", NULL, "create", &Volume1Connection)) != 0 ||
                (ret = Volume1Connection->open_session(Volume1Connection, NULL, NULL, &session)) != 0)
        {
            fprintf(stderr, "Error connecting to %s: %s\n",
                    ".", wiredtiger_strerror(ret));
        }
    
    
        ret = session->create(session, "table:access", "key_format=S,value_format=S");
        qDebug()<<ret;
        ret = session->open_cursor(session, "table:access", NULL, NULL, &cursor);
    
    
        QHash<QUuid, QUuid> TempArray;
        for(int i=0; i<10; i++)
            TempArray.insert(QUuid::createUuid(), QUuid::createUuid());
    
    
    
    
        QHashIterator<QUuid, QUuid> i(TempArray);
        while (i.hasNext())
        {
            i.next();
            qDebug()<< i.key() << ": " << i.value();
    
    
            cursor->set_key(cursor,  i.key().toString().remove('{').remove('}').toLocal8Bit().data());        /* Insert a record. */
            cursor->set_value(cursor,i.value().toString().remove('{').remove('}').toLocal8Bit().data());
            ret = cursor->insert(cursor);
        }
    
    
        ret = cursor->reset(cursor);            /* Restart the scan. */
        while ((ret = cursor->next(cursor)) == 0)
        {
            cursor->get_key(cursor, &key);
            cursor->get_value(cursor, &value);
            printf("Got record: %s : %s\n", key, value);
        }
    
    
        i.toFront();
        while (i.hasNext())
        {
            i.next();
            qDebug()<< i.key() << ": " << i.value();
            cursor->set_key(cursor, i.key().toString().remove('{').remove('}').toLocal8Bit().data());
            const char* val;
            if(cursor->search(cursor)==0)
            {
                cursor->get_value(cursor, &val);
                qDebug()<<"---- key"<<i.key()<<"value from base"<<val;
            }
            else
                qDebug()<<"key not found";
            //cursor->search()
        }
    
    
        cursor->close(cursor);
        ret = Volume1Connection->close(Volume1Connection, NULL);


        quit();

    В результате прогона программки получаем в базе мусор. Я как-то к этому не привык. Да и не хочется верить в то, что мотор не работает.
    Конечно это я где-то что-то делаю не так.
    Кто знает! Кто пробовал! Подсобите!
    _______________
    Разобрался. Строки для передачи курсору надо много тщательней готовить принимая во внимание особенности api.
    Должен отметить, что это очень интересный инструмент. И хоть я и готов даже говорить о замене существующего (пусть и неспешного) комфорта постгреса, но явно использовать в некоторых местах буду.
    Ну а там, видно будет.
  • Поиск по этому блогу

    Copyright (c) Oleg Shall. Технологии Blogger.