Jeśli chcę zachować uporządkowaną listę w Firebase, wydaje mi się, że najlepiej jest ręcznie przypisać priorytet do każdego elementu na mojej liście. Oznacza to, że jeśli wstawię lub usuniemy przedmiot z listy, muszę zaktualizować priorytety wszystkich następujących po nim elementów. W przypadku pozycji na początku listy oznacza to aktualizację każdego elementu na liście. Czy w tym przypadku istnieje lepsza struktura danych lub algorytm?Wydajność uporządkowanej listy w Firebase
Odpowiedz
Możesz utworzyć uporządkowaną listę, odpowiednio ustawiając priorytet elementów. Pozycje na liście są sortowane leksykalnie według priorytetu lub jeśli priorytet może zostać sparsowany do wartości liczbowej.
Jeśli chcesz wstawić elementy na środek istniejącej listy, modyfikowanie priorytetów istniejących elementów działałoby, ale byłoby okropnie nieefektywne. Lepszym rozwiązaniem jest wybór priorytetu między dwoma elementami, w których chcesz wstawić wartość i ustawić priorytet dla nowego elementu.
Na przykład, jeśli masz element 1 z priorytetem "a", a element 2 z priorytetem "b", możesz wstawić element 3 między dwoma z priorytetem "aa" (lub "aq", "az", itp).
Z naszego doświadczenia wynika, że najczęściej przy tworzeniu uporządkowanej listy niekoniecznie znasz pozycję na liście, którą chcesz wcześniej wstawić. Na przykład, jeśli tworzysz tablicę liderów do gry, nie wiesz z góry, że chcesz umieścić nowy wynik na 3. miejscu, raczej wiesz, że chcesz go wstawić w dowolnym miejscu, zdobywając 10000 punktów (która może być trzecia). W takim przypadku wystarczy ustawić priorytet dla wyniku. Zobacz nasz przykład tablicy liderów tutaj: https://www.firebase.com/tutorial/#example-leaderboard
Dzięki za odpowiedź tak szybko. W tym przypadku chciałbym utworzyć listę "przeciągnij i upuść", aby kolejność została zdefiniowana przez użytkownika. Podoba mi się pomysł umieszczenia priorytetu między dwoma pożądanymi przedmiotami, ale utknąłem na jednej rzeczy: skąd wiesz, co to jest następny element, gdy używasz wywołania zwrotnego 'child_added'? Dostajesz tylko poprzedni element, a nie następny. –
Czy kiedykolwiek znalazłeś dobre rozwiązanie dla listy zamówień arbitralnych @RadfordSmith? –
Klejnot Ruby ranked_model ma interesujące podejście do tego problemu. Używa liczby całkowitej pozycji, jak wiele innych implementacji "aktów jako list", ale nie polega na przepisywaniu wszystkich liczb całkowitych na każdym ruchu pozycji. Zamiast tego rozdziela szeroko liczby całkowite, dzięki czemu każda aktualizacja może dotyczyć tylko jednego lub dwóch wierszy. Może warto przejrzeć plik readme i kod, aby sprawdzić, czy to podejście może się tutaj zmieścić.
- 1. Zagnieżdżanie elementów listy w elementach listy uporządkowanej listy?
- 2. Binary wyszukiwania w uporządkowanej listy w java
- 3. Szybsze niż wyszukiwanie binarne dla uporządkowanej listy
- 4. Usuń lewy odstęp uporządkowanej listy (OL)
- 5. Firebase - czy buforowanie poprawia wydajność?
- 6. Najbardziej odpowiednia struktura danych dla uporządkowanej listy w RDBMS?
- 7. C++ Dodaj do listy powiązanej w uporządkowanej kolejności
- 8. Wydajność bazy Firebase z dużymi zbiorami danych
- 9. Mathematica „Listy” połączone i wydajność
- 10. Primefaces 3.3.1 wydajność listy wyboru jest powolna
- 11. Powiązanie uporządkowanej relacji z NSArrayController
- 12. Jak skutecznie wyszukiwać w uporządkowanej macierzy?
- 13. Jak uzyskać rozmiar elementu/listy w Firebase bez uzyskania wszystkiego?
- 14. Najlepszy sposób na zapisanie uporządkowanej listy w bazie danych przy zachowaniu zamawiania
- 15. Numery uporządkowanej listy zmieniają się w 0 podczas klikania zakładki jQuery korytka.
- 16. Wykonanie funkcji Firebase i subskrypcji do listy, która jest aktualizowana przez funkcję firebase
- 17. Zapytanie LINQ do podzielenia uporządkowanej listy na podlisty sąsiednich punktów według niektórych kryteriów.
- 18. jquery - podczas przeciągania uporządkowanej pozycji listy numeracja kolejnych elementów zawsze zwiększa się o 1
- 19. Firebase Błąd: Uwierzytelnianie potrzebne Firebase-tools
- 20. Usunięcie uporządkowanej sekwencji liczb z BST
- 21. Zrozumienie wydajność Sinon.js w(), wydajność()() i callsArg
- 22. Popraw wydajność binarnej serializacji dla dużej listy struktur
- 23. Wybierz wszystko po pewnym wierszu w uporządkowanej tabeli SQL
- 24. dopasowywanie ciągów w liście uporządkowanej według algorytmu geograficznego (metoda MATLABA)
- 25. Grupa użytkowników w Firebase
- 26. Przechowywanie słowników w Firebase?
- 27. Firebase: Filtry w kohortach
- 28. Uwierzytelnianie NodeJS w Firebase
- 29. Otrzymuj nazwy węzłów dziecka w Firebase bez uzyskiwania ich dzieci również w odpowiedzi Firebase?
- 30. firebase-tools "-bash: firebase: command not found"
Edytowałem to, aby poprosić o lepsze d.s. lub algorytm - jedyna uczciwa odpowiedź na pytanie "czy to wystarczająco szybkie?" to "czy profilowałeś to?" – djechlin
Jaki jest algorytm sortowania? Alfabetyczny? Liczbowy? Według znacznika czasu? Zastanawiam się nad tymi mglistymi pytaniami na temat Firebase i zazwyczaj stwierdzam, że są one o wiele łatwiejsze do rozwiązania, gdy dokładnie zidentyfikuję pożądane zachowanie. – Kato