2015-08-10 2 views
3

У нас есть приложение для iPhone, которое поддерживается Core Data. Мы используем int64 в нашем основном хранилище данных, и мне интересно, нужно ли нам делать что-либо особенное для хранения номера в firebase. Мне интересно об этом, поскольку javascript не поддерживает 64-битные целые числа без знака. Мы также пишем приложение javascript, которое должно будет прочитать этот номер.Хранение «длинного» типа в firebase

Один из подходов, который я могу придумать, заключается в том, чтобы сохранить это как строку, а затем преобразовать ее в int64 на iPhone-клиенте. Однако это кажется немного утомительным, и firedata, похоже, не поддерживает такие переводы напрямую. Мы также должны добавить подтверждение этого атрибута в Firebase, поэтому проверка будет состоять в том, что вместо числа это будет строка с только цифрами.

Неужели кто-нибудь столкнулся с этими проблемами и что было бы рекомендуемым подходом к этой проблеме?

ответ

5

Это действительно может быть сложной ситуацией. Прежде всего, чтобы сделать ситуацию понятной (я думаю, вы знаете об этом, но просто чтобы избежать путаницы):

  • Firebase может/будет хранить 64-битные целые числа точно.
  • Пользователи Android и iOS могут взаимодействовать (читать и писать) без 64-разрядных целых чисел.
  • JavaScript хранит все числа в виде 64-битных чисел с плавающей запятой, что означает, что он может точно представлять целые числа до ~ 2^52 точно. Целые числа между 2^52 и 2^64 могут потерять точность (округляются до ближайшего целого числа, представляемого 64-битным поплавком).

Что касается ваших вариантов, я подозреваю, что у вас есть хорошая ручка на них, как хорошо, но вы можете:

  • Терпеть потери точности. Иногда это нормально. Например, возможно, вы можете гарантировать, что не будете хранить целые числа более 2^52, поэтому потеря точности не будет проблемой. Или, может быть, вам нужно только просмотреть данные из JS, и некоторые округления в порядке. Единственное, о чем нужно быть осторожным, - это прочитать данные JS и записать их обратно, данные будут записаны обратно в Firebase с потерей точности.
  • Сохраните номера как строки. Как вы предположили, вы можете просто сохранить номер в виде строки. Но это может быть неудобно и ограничивает проверку, которую вы можете выполнять в правилах безопасности.
  • Разделите число на 2 32-битных целых числа. Вы можете сохранить верхние 32-бит отдельно от нижних 32-бит. Это, вероятно, неудобно, но позволит вам сохранять точность, а также выполнять некоторую числовую проверку в правилах безопасности.

Могут быть другие варианты, но это те, которые сразу приходят на ум. Надеюсь это поможет!

Смежные вопросы