Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/pages/docs/liveobjects/batch.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ Batch operations are only currently only supported in LiveObjects JavaScript. Su

Batch operations allow multiple updates to be grouped into a single channel message and applied atomically. It ensures that all operations in a batch either succeed together or are discarded entirely. Batching is essential when multiple related updates to channel objects must be applied as a single atomic unit, for example, when application logic depends on multiple objects being updated simultaneously. Batching ensures that all operations in the batch either succeed or fail together.

<Aside data-type='see-evidence'>With 50% capacity headroom built in, Ably instantly absorbs traffic spikes without degradation or pre-provisioning. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/infrastructure-operations#resource-implications)</Aside>

<Aside data-type="note">
Batch operations are different from ["Message batching"](/docs/messages/batch), which is a server-side feature of [Pub/Sub](/docs/basics).
</Aside>
Expand Down
2 changes: 2 additions & 0 deletions src/pages/docs/liveobjects/concepts/objects.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ meta_description: "Learn how data is represented as objects in Ably LiveObjects"

LiveObjects enables you to store shared data as "objects" on a channel, allowing your application data to be synchronized across multiple users and devices in realtime. This document explains the key concepts you need to know when working with objects.

<Aside data-type='see-evidence'>Users in the same region will have a consistent experience with all subscribers observing messages in the same order. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/message-ordering#practical-implications-of-dual-ordering)</Aside>

## Primitive types <a id="primitive-types"/>

Primitive types are the fundamental data types that can be stored in a collection type. Currently, the only supported collection type is a [LiveMap](/docs/liveobjects/map).
Expand Down
2 changes: 2 additions & 0 deletions src/pages/docs/liveobjects/concepts/operations.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ LiveObjects operations define how object data is updated and synchronized across

When you create or update an object, the change is expressed as an _operation_ that is sent as an [object message](/docs/metadata-stats/stats#messages) on the channel. The operation is then applied to the object instance on all clients that are subscribed to the channel.

<Aside data-type='see-evidence'>Applications maintain their state during disruptions - all messages are received in correct order with zero message loss. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/connection-recovery)</Aside>

This document explains the key concepts you need to know when working with operations.

## Operation types <a id="operation-types"/>
Expand Down
4 changes: 4 additions & 0 deletions src/pages/docs/liveobjects/concepts/synchronization.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ Each object instance is identified by a unique [object ID](/docs/liveobjects/con

Ably stores the object data durably such that the data is available even after the channel becomes inactive. The data is stored in multiple regional datacenters and across multiple availability zones. This ensures that the data is available even if there is disruption in one or more datacenters.

<Aside data-type='see-evidence'>Every message is redundantly stored across multiple isolated datacenters within your region before acknowledgment, preventing data loss. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/fault-tolerance#core-layer)</Aside>

When a channel first becomes active in a region, the channel loads the object data from durable storage into memory to facilitate low-latency operation processing.

## Client objects <a id="client-objects"/>
Expand All @@ -56,3 +58,5 @@ Currently, when a client publishes an operation it is not immediately applied to
</Aside>

If there is a loss of continuity on the channel for any reason, such as the client becoming disconnected for more than two minutes and entering the [suspended state](/docs/connect/states#connection-states), the client objects will automatically be resynchronized when it reconnects.

<Aside data-type='see-evidence'>If a client reconnects within two minutes, full connection recovery with exactly-once delivery is guaranteed. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/idempotency#connection-recovery-and-exactly-once-delivery)</Aside>
2 changes: 2 additions & 0 deletions src/pages/docs/liveobjects/inband-objects.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ If you're using LiveObjects from one of the the following languages, then use th

Inband objects works by delivering changes to channel objects as regular channel messages, similar to [inband occupancy](/docs/channels/options#occupancy).

<Aside data-type='see-evidence'>Ably delivers messages globally with a median latency of 37ms, validated by over 6 million daily measurements across its infrastructure. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/latency#latency)</Aside>

## Enable Inband Objects <a id="inband-objects-enable"/>

To enable inband objects, use the `objects` [channel parameter](/docs/channels/options#objects) when getting a channel:
Expand Down
6 changes: 6 additions & 0 deletions src/pages/docs/liveobjects/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,16 @@ LiveObjects provides a global, durable, and conflict-free shared data layer buil
LiveObjects has the same performance guarantees and scaling potential as [channels](/docs/channels).
</Aside>

<Aside data-type='see-evidence'>Ably delivers over 500 billion messages monthly, demonstrating massive throughput capability. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/scalability)</Aside>

LiveObjects enables you to store shared data as "objects" on [channels](/docs/channels). When an object is updated, changes are automatically propagated to all subscribed clients in realtime, ensuring everyone always sees the latest state.

LiveObjects provides a simple, purpose-built API that handles realtime synchronization, persistence, and convergence behind the scenes. The result is a single logical view of your data - distributed to the edge, updated in real time, and always in sync - no matter how many users are connected or where they are in the world.

<Aside data-type='see-evidence'>Messages published using Realtime have consistent ordering for all subscribers, with each message assigned a unique serial number to preserve its place. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/message-ordering)</Aside>

<Aside data-type='see-evidence'>Ably's tiered fanout architecture allows it to scale to handle millions of subscribers per channel. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/platform-scalability#handling-high-scale-fanout)</Aside>

## Use cases <a id="use-cases"/>

You can use LiveObjects to build all sorts of powerful functionality in your applications that require realtime updates to shared data. It is useful when your application has data that:
Expand Down
2 changes: 2 additions & 0 deletions src/pages/docs/liveobjects/lifecycle.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ channel.getObjects().on(ObjectsStateEvent.SYNCED, (stateEvent) -> {
LiveObjects synchronization events do not replace [connection](/docs/connect/states) or [channel](/docs/channel/states) states. You should still monitor these states and handle [connection](/docs/connect/states#handling-failures) and [channel](/docs/channel/states#failure) failures to ensure your application behaves as expected. LiveObjects synchronization events specifically inform you about the progress of LiveObjects data synchronization and should be used alongside other state management mechanisms.
</Aside>

<Aside data-type='see-evidence'>Ably's SDKs automatically resolve edge network failures within 30 seconds, keeping your users connected even during infrastructure issues. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/edge-network)</Aside>

## Handle object lifecycle events <a id="objects-lifecycle"/>

<If lang="javascript">
Expand Down
2 changes: 2 additions & 0 deletions src/pages/docs/liveobjects/storage.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ meta_description: "Learn about LiveObjects object storage."

Ably durably stores all objects on a channel for a retention period that is configured to 90 days by default. If the data is not updated within the retention period, it automatically expires. After expiry, the channel is reset to its initial state and only includes an empty <If lang="javascript">[channel object](/docs/liveobjects/concepts/objects#channel-object)</If><If lang="swift,java">[root object](/docs/liveobjects/concepts/objects#root-object)</If>.

<Aside data-type='see-evidence'>Ably maintains message continuity for up to 2 minutes during disconnections. The SDKs automatically handle reconnection and deliver all missed messages. [Click here for evidence 🔬](https://ably.com/docs/platform/architecture/connection-recovery)</Aside>

<Aside data-type='note'>
If you're interested in a configurable default object storage duration, please [get in touch](https://ably.com/support) with your requirements.
</Aside>
Expand Down