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.
Должен отметить, что это очень интересный инструмент. И хоть я и готов даже говорить о замене существующего (пусть и неспешного) комфорта постгреса, но явно использовать в некоторых местах буду.
Ну а там, видно будет.

Популярное

Надежды юношей питают.

К вопросу об организации оркестратора кластера в деле бесшовного ввода новых версий Kalpa-системы.

Опять про QTcpSocket и disconnected