Migrate Data Model from Scylla to Aerospike

Hello,
I’m working on the backend of a Mobile Application that let’s users create Parties and upload Video Stories related to a specific Party.
I have previously used Scylla to store Parties and Story Metadata. But I did hit some roadblocks, like ttl expiration not being reported in CDC and no Geo search support. I now want to try out Aerospike and see if it is possible to migrate my current data model and all queries to Aerospike.

Party Data Model: It has a unique id and stores the user_id of the party creator. Lat/long can be used for Geo Searching (not possible in Scylla but in Aerospike). And a party also has a default TTL of 24 hours.

Supported Party Queries: A Party should have basic CRUD functionality and be identified by it’s id. Another query I want to support is getting all Parties of a user, in descending order of creation data, which i was able to use the timeuuid (UUID V1) for. To support party_by_user I had to create a materialized view which just copies the Party row into another table with a different primary key and clustering order, results in twice the data to be stored.

CREATE TABLE IF NOT EXISTS parties (
  id timeuuid PRIMARY KEY,
  user_id text,
  is_public boolean,
  lat float,
  long float,
  start_date timestamp,
) WITH default_time_to_live = 86400;

CREATE MATERIALIZED VIEW parties_by_user AS 
  SELECT * FROM parties
  WHERE id IS NOT NULL AND user_id IS NOT NULL
  PRIMARY KEY (user_id, id)
WITH CLUSTERING ORDER BY (id DESC);

The Story Data Model is similar: It also has a unique id of type timeuuid which I can use to order by in the materialzed views. The party_id & user_id are also stored so that I can query all Stories of a Party/User. The lat/long of a story is also recorded to allow Geo Searching for Stories nearby. For the Stories I needed two extra Materialized views to allow querying a Story by Party/User and also set the order to descending order of creation data. This result in a 3x of data.

Supported Story Queries: Basic CRUD operation through the id of a Story. Support finding nearby Stories through Geo Search on Lat/Long. Support getting all Stories of a User/Party ordered by creation date in descending order (Latest Story returned first)

CREATE TABLE IF NOT EXISTS stories (
  id timeuuid PRIMARY KEY,
  party_id text,
  user_id text,
  lat float,
  long float,
  url text,
  tagged_friends list<text>,
) WITH default_time_to_live = 86400;

CREATE MATERIALIZED VIEW stories_by_party AS 
  SELECT * FROM stories
  WHERE id IS NOT NULL AND party_id IS NOT NULL
  PRIMARY KEY (party_id, id)
WITH CLUSTERING ORDER BY (id DESC);

CREATE MATERIALIZED VIEW stories_by_user AS 
  SELECT * FROM stories
  WHERE id IS NOT NULL AND user_id IS NOT NULL
  PRIMARY KEY (user_id, id)
WITH CLUSTERING ORDER BY (id DESC);

I know that Geo Searching would not be a problem in Aerospike since I could create a Secondary Index on a GeoJSON point.
Getting all Parties/Stories of a user could be implemented with a Secondary Index on the user_id but I don’t know if it’s possible to order the results in Aerospike while using Secondary Indexes.

It would realy help me out if I could get some tips on how to implement these Queries optimally the Aerospike way and if Aerospike is even suited for my kind of Queries.

Seems (at least) some of this is covered under this other topic: Feedback on Denormalized Model vs Normalized Model .