Я разрабатываю и поддерживаю приложение Google Tasks на Android. В настоящее время у меня есть класс, который содержит списки и задачи, в порядке, в ArrayList
. Я собираюсь перейти на SQLite, чтобы лучше структурировать приложение. Я не уверен, что лучший и простой способ сохранить порядок задач в базе данных будет.Что такое хороший способ сохранить заказ в базе данных SQLite
Прямо сейчас, я могу просто remove
и add
элементов с разными индексами, и, очевидно, другие индексы строк списка находятся в правильном порядке. С базой данных SQLite я могу сохранить позиционный номер в каждой строке, и каждый раз, когда я перемещаю задачу, обновляю следующие строки соответственно.
Проблема с этой системой заключается в параллелизме и ремонтопригодности: если позиция строки обновляется (и позиции последующих строк увеличиваются/уменьшаются), в то время как синхронизация задач происходит, она может стать беспорядочной, поскольку синхронизация изменение позиций строк.
Я мог бы добавить блокировку Mutex, но я не хочу этого делать, я хочу, чтобы пользователи могли обновлять данные одновременно с синхронизацией, и если возник конфликт, то одна из новых позиций будет отброшен, без перепутанных строк.
Мой вопрос: Каков наилучший способ хранения и обновления порядка в базе данных SQLite?
Я не уверен, как относиться к ним как к приоритету, так что вам нужно будет только изменить одно значение. Например, если A является приоритетом 1, B является приоритетом 2, и я хочу поставить C между A и B, мне нужно сдвинуть B на 3 и C на 2. – FaultException
Вот что я имел в виду, имея возможность иметь приоритет значения будут разрежены - пусть они не будут последовательными.Вы не можете сделать это, если все значения последовательны, но если они разделены, скажем, 100, то вы можете легко установить его как значение между приоритетом элементов, которые должны появляться после и после. – babbageclunk
Вот как работает API Tasks Google, но у вас не хватит места, не так ли? Например, если ваш список выглядел так: 0, 1, 3, 6, 12, 25, 50, 100 (последняя задача.) Вы не могли добавить задачу в начале, так как позиция была бы 0/2, что также должно быть 0. – FaultException