CrossRider - Есть ли ограничение на размер объектов, сохраняемых в локальной базе данных?

У нас есть объект, который загружается с http://jsons.[part_of_link_suppressed].com.s3.amazonaws.com/selectors.json. Мы пытались сохранить его в локальную базу данных, но ничего не сохраняется. Я проверил, и если я сохраняю небольшой объект, он сохраняется в базе данных. Есть ли ограничение на размер объектов, которые сохраняются в локальной базе данных? И если есть, то какой предел? Нужно ли нам делить объекты на мелкие объекты, если мы хотим сохранить их в локальной базе данных? И как нам разделить произвольные объекты на мелкие объекты и сохранить их в базу данных?

Изменить: я имею в виду синхронную базу данных с appAPI.db API.


person Uri    schedule 12.11.2014    source источник
comment
Мы разделили объект на несколько небольших объектов, и теперь они сохраняются в локальную базу данных.   -  person Uri    schedule 12.11.2014


Ответы (1)


Я не уверен, какой API-интерфейс crossrider db вы используете, но все их API-интерфейсы хранения имеют некоторые ограничения по размеру. файл, на который вы ссылаетесь, невелик, поэтому я думаю, вы используете appAPI.db

AppAPI.db очень ограничен, как говорится в их текущей документации:

Используйте этот метод для сохранения целых чисел, логических значений, коротких строк примерно из 10 символов и простых объектов, содержащих вышеупомянутые типы. Если вам нужно сохранить большие объемы данных, используйте appAPI.db.async. Хотя общий размер всех записей составляет 5 МБ, http://docs.crossrider.com/#!/api/appAPI.db

С appAPI.db.async ограничение составляет 1 МБ на ключ, всего 50 МБ — это должно работать за вас. Вы можете использовать встроенный метод для сохранения удаленных ресурсов в асинхронной базе данных: appAPI.db.async.setFromRemote

http://docs.crossrider.com/#!/api/appAPI.db.async

Если вы хотите сэкономить еще больше места, вы можете обслуживать свою строку json без разрывов строк и пробелов (минимизированные/не напечатанные красиво), или вы можете сделать это на стороне клиента, прежде чем сохранять ее в БД (JSON.parse, а затем снова упорядочить ее) . Вполне возможно, что кроссрайдер делает это внутри, когда вы сохраняете объект js, а не строку.

person Bnaya    schedule 12.11.2014
comment
Мы предпочитаем не использовать appAPI.db.async, потому что хотим, чтобы данные сохранялись или загружались немедленно, а не использовали обратные вызовы. Если мы используем appAPI.db, каков предел размера объектов или строк? Это не может быть 10 символов, потому что мы сохранили большие объекты и строки. Нам придется реализовать функции, которые будут делить объекты или строки на несколько меньших объектов или строк. - person Uri; 13.11.2014
comment
Как правило, точный размер значения ключа appAPI.db зависит от реализации в браузере. Для согласованной работы в разных браузерах рекомендуется использовать эту базу данных для хранения небольших данных и, конечно же, ограничить размер до 1000 байт на ключ. [Раскрытие информации: я сотрудник Crossrider] - person Shlomo; 13.11.2014
comment
В чем проблема с обратными вызовами? если вы работаете с js, вы должны уметь работать с асинхронным кодом. И если в документах платформы указано, что это должно быть 10 символов, и вы экономите больше, потому что в настоящее время он работает, вы рискуете, что однажды он перестанет работать без предварительного уведомления. и может вести себя по-разному в разных браузерах. - person Bnaya; 13.11.2014
comment
@Shlomo в ваших документах указаны короткие строки примерно из 10 символов, а не 1 КБ. - person Bnaya; 13.11.2014
comment
Синхронная база данных немного похожа на файлы cookie; поэтому, хотя он может хранить больше, это не рекомендуется и не поощряется. Изначально мы указывали максимальный размер в документах, но это изменилось, когда некоторые браузеры начали ограничивать свои локальные базы данных, поэтому вместо того, чтобы указывать максимальный размер, мы даем рекомендации по его использованию, т. е. он идеально подходит для хранения небольших данных, таких как данные конфигурации/состояния. . - person Shlomo; 13.11.2014
comment
@Bnaya нам проще использовать синхронную базу данных без обратных вызовов, если только объект, который мы сохраняем, не очень большой, и в этом случае мы будем использовать асинхронную базу данных. В настоящее время я разделил все объекты на строки из 50 символов или меньше, это работает с Internet Explorer 11, и это то, что нам нужно. Но если есть ограничение, которое поддерживается во всех браузерах, я хотел бы знать, что это такое, и мы можем изменить его соответствующим образом. Но 10 символов мне кажутся меньше фактического лимита. - person Uri; 13.11.2014