使用多列过滤器的 Cassandra 数据建模
Cassandra data modeling with multi-column filter
我有一个 Cassandra table stokes
,它有 4 列 ( item(text) ,market ( text ) , location( text ) , time ( timestamp ) , value( int) )
项目是一个分区键,市场、位置和时间是一个相同顺序的聚类键。
item | market | location | time | value
x | m1 | l1 | t1 | v1
x | m1 | l2 | t2 | v2
x | m1 | l3 | t3 | v3
y | m1 | l1 | t4 | v4
y | m1 | l2 | t5 | v5
y | m1 | l3 | t6 | v6
应用程序需要在两种情况下查询 Cassandra table
- 对于给定的商品、市场和位置,通过查询库存来获取记录 table。
例如,将获取记录下方的项目 x、市场 l1 和位置 l1
x | m1 | l1 | t1 | v1
对于给定的商品、市场和所有位置,在输入时间后通过查询库存来获取记录 table。例如 item x , market m1 , t1 时间后的所有 location 记录都会被抓取
x | m1 | l2 | t2 | v2
x | m1 | l3 | t3 | v3
我了解在 Cassandra 应用程序需求和概念建模中,首先要对数据建模进行非形式化。我如何凸轮模型数据来满足我的两个应用程序要求。
对于我的第二个要求,我无法查询
select <columns> from <table> where item =x and market= m1 and time > t2; // wrong as location missing
不允许跳过位置,位置可以是多个。如何建模或查询以满足这两个要求。
对于第一个应用程序查询,分区键是 item
并且 market
和 location
都是聚类列:
CREATE TABLE items (
item text,
market text,
location text,
time timestamp,
value int,
PRIMARY KEY (item, market, location)
)
对于第二个应用查询,它看起来与 items
table 类似,只是数据按 market
和 time
:
组织
CREATE TABLE locations_by_item (
item text,
market text,
location text,
time timestamp,
value int,
PRIMARY KEY (item, market, time)
)
当您从 table 检索数据时:
SELECT * FROM locations_by_item
WHERE item = ?
AND market = ?
AND time > ?
它将 return 行 location
+ value
。干杯!
我有一个 Cassandra table stokes
,它有 4 列 ( item(text) ,market ( text ) , location( text ) , time ( timestamp ) , value( int) )
项目是一个分区键,市场、位置和时间是一个相同顺序的聚类键。
item | market | location | time | value
x | m1 | l1 | t1 | v1
x | m1 | l2 | t2 | v2
x | m1 | l3 | t3 | v3
y | m1 | l1 | t4 | v4
y | m1 | l2 | t5 | v5
y | m1 | l3 | t6 | v6
应用程序需要在两种情况下查询 Cassandra table
- 对于给定的商品、市场和位置,通过查询库存来获取记录 table。 例如,将获取记录下方的项目 x、市场 l1 和位置 l1
x | m1 | l1 | t1 | v1
对于给定的商品、市场和所有位置,在输入时间后通过查询库存来获取记录 table。例如 item x , market m1 , t1 时间后的所有 location 记录都会被抓取
x | m1 | l2 | t2 | v2 x | m1 | l3 | t3 | v3
我了解在 Cassandra 应用程序需求和概念建模中,首先要对数据建模进行非形式化。我如何凸轮模型数据来满足我的两个应用程序要求。
对于我的第二个要求,我无法查询
select <columns> from <table> where item =x and market= m1 and time > t2; // wrong as location missing
不允许跳过位置,位置可以是多个。如何建模或查询以满足这两个要求。
对于第一个应用程序查询,分区键是 item
并且 market
和 location
都是聚类列:
CREATE TABLE items (
item text,
market text,
location text,
time timestamp,
value int,
PRIMARY KEY (item, market, location)
)
对于第二个应用查询,它看起来与 items
table 类似,只是数据按 market
和 time
:
CREATE TABLE locations_by_item (
item text,
market text,
location text,
time timestamp,
value int,
PRIMARY KEY (item, market, time)
)
当您从 table 检索数据时:
SELECT * FROM locations_by_item
WHERE item = ?
AND market = ?
AND time > ?
它将 return 行 location
+ value
。干杯!