Gedistribueerde gegevensstructuren

De Vloeiend Framework biedt ontwikkelaars gedistribueerde gegevensstructuren (DDSes) die ervoor zorgen dat elke verbonden client automatisch toegang heeft tot dezelfde status. De API's van DDSes zijn ontworpen om bekend te zijn met programmeurs die eerder algemene gegevensstructuren hebben gebruikt.

Notitie

In dit artikel wordt ervan uitgegaan dat u bekend bent met het introduceren van gedistribueerde gegevensstructuren op fluidframework.com.

Een gedistribueerde gegevensstructuur gedraagt zich als een lokale gegevensstructuur. Uw code kan er gegevens aan toevoegen, gegevens verwijderen, bijwerken, enzovoort. Een DDS is echter geen lokaal object. Een DDS kan ook worden gewijzigd door andere clients die dezelfde bovenliggende container van de DDS beschikbaar maken. Omdat gebruikers dezelfde DDS tegelijk kunnen wijzigen, moet u overwegen welke DDS moet worden gebruikt voor het modelleren van uw gegevens.

Notitie

Betekenis van 'gelijktijdig'

Twee of meer clients worden gezegd om tegelijkertijd een wijziging aan te brengen als ze elk een wijziging aanbrengen voordat ze de wijzigingen van de anderen van de server hebben ontvangen.

Het kiezen van de juiste gegevensstructuur voor uw scenario kan de prestaties en codestructuur van uw toepassing verbeteren.

DDSes verschillen van elkaar met drie kenmerken:

  • Basisgegevensstructuur: bijvoorbeeld sleutel-waardepaar, een reeks of een wachtrij.
  • Autonomie van de klant: Met een optimistische DDS kan elke client eenzijdig een waarde wijzigen en wordt de nieuwe waarde doorgegeven aan alle andere clients. Maar een consensus-DDS staat alleen een wijziging toe als deze door andere clients wordt geaccepteerd door een consensusproces.
  • Samenvoegbeleid: Het beleid dat bepaalt hoe conflicterende wijzigingen van clients worden opgelost.

Hieronder hebben we de gegevensstructuren opgesomd en beschreven wanneer ze het nuttigst kunnen zijn.

Sleutel-waardegegevens

Deze DDSes worden gebruikt voor het opslaan van sleutel-waardegegevens. Ze zijn optimistisch en gebruiken een beleid voor het samenvoegen van last-writer-wins. Hoewel de waarde van een paar een complex object kan zijn, kan de waarde van een bepaald paar niet rechtstreeks worden bewerkt; de volledige waarde moet worden vervangen door een nieuwe waarde met de gewenste bewerkingen, geheel voor geheel.

  • SharedMap: een basisgegevensstructuur met sleutelwaarden.

Sleutelwaardescenario's

Sleutel-waardegegevensstructuren zijn de meest voorkomende keuze voor veel scenario's.

  • Gebruikersvoorkeurgegevens.
  • Huidige status van een enquête.
  • De configuratie van een weergave.

Veelvoorkomende problemen en aanbevolen procedures voor key-value DDSes

  • Het opslaan van een teller in een SharedMap heeft onverwacht gedrag. Gebruik in plaats daarvan SharedCounter.
  • Het opslaan van matrices, lijsten of logboeken in een sleutelwaardevermelding kan leiden tot onverwacht gedrag omdat gebruikers delen van één item niet gezamenlijk kunnen wijzigen. Probeer de matrix- of lijstgegevens op te slaan in een SharedSequence of SharedInk.
  • Het opslaan van veel gegevens in één sleutelwaardevermelding kan prestatie- of samenvoegproblemen veroorzaken. Elke update werkt de volledige waarde bij in plaats van twee updates samen te voegen. Probeer de gegevens over meerdere sleutels te splitsen.

Reeksen

Deze DDSes worden gebruikt voor het opslaan van sequentiële gegevens. Ze zijn optimistisch. Sequentiegegevensstructuren zijn handig wanneer u gegevens wilt toevoegen aan of verwijderen uit een opgegeven index in een lijst of matrix. In tegenstelling tot de sleutel-waardegegevensstructuren hebben reeksen een opeenvolgende volgorde en kunnen gelijktijdige invoegingen van meerdere gebruikers verwerken.

  • SharedNumberSequence: een reeks getallen.
  • SharedObjectSequence: een reeks gewone objecten.

Reeksscenario's

  • Lijsten
  • Tijdlijnen

Veelvoorkomende problemen en aanbevolen procedures voor reeks-DDSes

  • Sla alleen onveranderbare gegevens op als een item in een reeks. De enige manier om de waarde van een item te wijzigen, is door het eerst uit de reeks te verwijderen en vervolgens een nieuwe waarde in te voegen op de positie waar de oude waarde zich bevond. Maar omdat andere clients kunnen invoegen en verwijderen, is er geen betrouwbare manier om de nieuwe waarde op de gewenste positie te krijgen.

Tekenreeksen

De SharedString DDS wordt gebruikt voor ongestructureerde tekstgegevens die gezamenlijk kunnen worden bewerkt. Het is optimistisch.

  • SharedString -- een gegevensstructuur voor het verwerken van gezamenlijke tekst.

Tekenreeksscenario's

  • Teksteditors

Zie ook

Zie de volgende secties van fluidframework.com voor meer informatie over DDSes en hoe u deze kunt gebruiken: