Может ли YDN-DB обрабатывать большие записи одновременно?

У меня проблемы с попыткой получить большой объем данных с помощью Ydn-db.

Проблема в:

-У меня есть большой файл JSON, который я хочу сохранить в своем приложении, чтобы использовать его в автономном режиме.

-Я запрашиваю файл, а затем успешно сохраняю данные, используя db.put

-Тогда, если я «распечатаю» сохраненные данные с помощью db.values, я получу только часть текста, который я ранее сохранил.

Вы также можете протестировать его, используя демонстрацию списка задач, приведенную в качестве примера здесь: http://dev.yathit.com/demo/ydn-db/todo.html

Если вы введете, скажем, текст размером 1 МБ, вы не сохраните весь текст, а только его часть.

Есть ли способ обойти эту проблему?

Спасибо!

РЕДАКТИРОВАТЬ: вот рабочий пример того, о чем я говорю http://flatic.com/test.html

РЕДАКТИРОВАТЬ 2: Хорошо, я думаю, что нашел временное решение, похоже, что YDN-DB не может хранить более 100 объектов Json, поэтому вместо того, чтобы сохранять мои данные Json напрямую, например:

db.put('table',largeJsonData);

Сначала я поместил строку largeJsonData as в простой массив Json, что-то вроде этого:

var data = {
"json":largeJsonData
};

db.put('table',data);

Теперь я могу читать данные, делая:

db.values('table').done(function(items) {
console.log(items[0].json);
});

Но вы не сможете выполнить поиск по индексу или получить конкретное значение по любому заданному идентификатору.


person Crash Override    schedule 19.03.2014    source источник
comment
Я думаю, вы найдете ограничение на основе этой подсистемы: stackoverflow.com/questions/2989284/   -  person Jason Sperske    schedule 20.03.2014


Ответы (2)


Пожалуйста, подтвердите свое утверждение простым тестом. Я не думаю, что браузер ограничивает 1 МБ на запись. Если потерпит неудачу, это потерпит неудачу целиком. Частичная фиксация просто невозможна.

Если websql, может быть потерян во время сериализации JSON. Возможно. Не тестировал.

РЕДАКТИРОВАТЬ после обновления вопроса.

Ваши данные не являются текстом, вы их анализируете - и они становятся массивом объектов JSON. db.put вставит их по отдельности как отдельную запись. db.values имеет ограничение в 100 записей. Если вы установите ограничение на db.values('todo', null, 100000), вы должны получить все.

Ограничение в 100 – обычное удивление для пользователя. Я ненавижу сюрпризы в API. Но все же я чувствую, что должен быть предел этому методу.

person Kyaw Tun    schedule 19.03.2014
comment
Любопытно, что я могу воспроизвести усечение текста на 4092 байта. Вот строка размером 1 МБ, которую я использовал в демо-версии Todo: Может быть, это демо, а не библиотека? - person buley; 20.03.2014
comment
Демо хорошо представляет библиотеку. Это проблема копирования/вставки? - person Kyaw Tun; 20.03.2014
comment
Вроде верная догадка - person buley; 20.03.2014
comment
Я не думаю, что это проблема с копией и вставкой, ограничение браузера или проблема с вводом. У меня такая же проблема, когда я помещаю большой текст в переменную. Я тестировал его с Firefox, Chrome, Safari, и я всегда получаю усеченную строку. - person Crash Override; 20.03.2014
comment
Спасибо Кьяу, это решило проблему! И спасибо за этот удивительный API и отличную поддержку. - person Crash Override; 21.03.2014
comment
Привет еще раз, извините, что снова беспокою вас, ребята, тем же самым, но после того, как я увеличил размер моего файла Json, я застрял с той же проблемой, даже если я увеличу лимит в db.values('todo', null, 100000) У меня есть 1647 объектов Json, но после использования db.values Я получаю только 1623. Вот рабочий пример ссылка (кстати, я печатаю результат в консоли) - person Crash Override; 28.03.2014
comment
Я думаю, что нашел проблему, например, db.values ​​не принимает похожие объекты внутри одного и того же массива, например, если вы создаете массив Json с 5 объектами с одинаковым содержимым, он будет принимать массив, как если бы он имел только 1 объект . Я вижу, что в моем массиве Json есть два похожих объекта, которые отличаются только одним номером, и это создает здесь проблему. - person Crash Override; 28.03.2014
comment
Хорошо .. Я изменил ключевой путь на случайный автоматически увеличивающийся, поэтому они всегда уникальны. Теперь он наконец работает! Проблема заключалась в том, что Keypath не был уникальным. - person Crash Override; 28.03.2014

В демоверсии кажется, что браузер усекает поле ввода.

String.length дает вам ~bytesize на английском языке. Я скопировал/вставил строку размером 0,87 МБ из stackoverflow.com|: https://gist.github.com/editor/f85257b29f51ac5a3280

Вы можете видеть здесь, что я беру свой big_string и назначаю его значению поля ввода.

введите здесь описание изображения

Когда я перечитал его, он оказался на 397308 байт меньше.

введите здесь описание изображения

Это правда, что IDB связан своими технологиями реализации (LevelDB в Chrome, SQLLite в Firefox). Например, я гарантирую, что записи будут низкими с большими объектами данных. Но если Кьяу говорит, что у автора библиотеки нет ограничений, я бы поверил ему в том, что касается YDN.

person buley    schedule 20.03.2014