2016-04-07 2 views
6

Я хочу сохранить список элементов с помощью AsyncStorage. Список будет обновляться с течением времени.Хранение списка с помощью React Native AsyncStorage: много ключей или один?

Вот пример состояния список может быть:

[ 
    { 
    name: "Alice", 
    email: "[email protected]" 
    }, 
    { 
    name: "Bob", 
    email: "[email protected]", 
    address: "30 Madison Ave., NY" 
    } 
] 

Теперь, кажется, что есть два варианта для хранения этого списка:

  1. магазин каждый контакт под его собственным ключ
  2. магазин весь список под один ключ

Есть преимущества либо pproach - что предпочтительнее в React Native?

+3

Рассмотрите возможность использования библиотеки базы данных, как [Realm] (https://realm.io/docs/react-native/latest/). Он имеет много преимуществ перед AsyncStorage для данных, более сложных, чем ключ/значение. – David

ответ

4

Я думаю, что это зависит от того, как вы планируете использовать, получать доступ и обновлять данные. Существует несколько методов asyncstorage, которые вы можете использовать, чтобы помочь сделать любой случай проще.

Если вы решите пойти по многим маршрутам ключей, посмотрите на multiSet и multiGet, что позволит вам получить несколько ключей в одном вызове функции. И getAllKeys избавит вас от необходимости «держать дорожку всех созданных вами ключей», решая обе проблемы, упомянутые Фредриком Моттом.

Для обновления многих ключей в один звонок, выйдите из multiMerge, который является действительно мощным методом, аналогичным mergeItem, но одновременно с несколькими ключами.

Итак, вы видите, что действительно можете идти по любому маршруту. Если вы разделите свои данные на несколько ключей, то вы, вероятно, просто захотите потратить некоторое время на ознакомление с методами, упомянутыми выше.

И предложение Давида дать Relm взгляд может иметь некоторое значение и для вас, опять же ... в зависимости от ваших потребностей.

3

Для удобства использования я бы сохранил список в целом; с тех пор вам не нужно отслеживать все ключи, созданные для каждого контакта, индивидуально; и загрузка/сохранение их будет проще (всего один вызов функции, а не цикл по всем вашим контактам).

Но это в основном личное предпочтение; нет никаких реальных ограничений для любого из двух методов.

1

Я бы добавил к двум хорошим ответам Криса и Фредерика: это зависит от размера вашего списка и размера ваших документов.

Переход с одним списком в целом намного проще в управлении, но не масштабируется (вычисление будет более тяжелым с размером вашего глобального значения). Идет с одним ключом на предмет добавляет некоторую сложность, но масштабы.

Лично я начал со всего в одном ключе, а теперь рефакторинг должен иметь один документ за ключ, потому что когда я обрабатываю сотни больших документов, выступления явно ухудшаются.

И если вы работаете с тысячами или десятками тысяч элементов, я думаю, вы должны пойти на правильную базу данных, такую ​​как sqlite или realm (но отладка в данный момент является проблемой в сфере).

Было бы интересно узнать истинные пределы asyncStorage, я где-то читал, это было несколько мегабайт, если вы спросите в своем родном конфиге, чтобы увеличить его