将RDBMS迁移到Cassandra

Ped*_*nha 1 rdbms database-design database-migration cassandra nosql

我有一个包含以下表的RDBMS数据库:

机场(iata PK,机场,城市,州,国家,拉特,长)

cancellation_cause(cod_cancellation PK,description)

Manufaturer(id_manufacturer PK,MANUFACTURER_NAME)

型号(id_model PK,model_name,id_manufacturer FK)

航空公司(airline_code PK,说明)

airplane_type(id_AirplaneType PK,airplane_type)

engine_type(id_engine PK,engine_type)

Aircraft_type(id_aircraft PK,aircraft_type)

飞机(TailNumber PK,id_model FK, id_aircraft FK,airline_code FK,id_AirplaneType FK,id_engine FK, Issue_date,status,year)

飞行(id_flight PK,cod_cancellation FK,TailNumber FK,iata_origin FK,iata_destin FK,Year,Month,DayofMonth,DayofWeek,DepTime,CRSTime,ArrTime,CRSArrTime,FlightNum,AtualElapsedTime,CRSElapsedTime,AirTime,ArrDelay,DepDelay,distance,TaxiIn,TaiOut ,取消,转移)

注意:PK - 主键; FK - 外键

我正在进行RDBMS和Cassandra数据库之间的比较研究.我的目标是将此数据库迁移到Cassandra并在两者中运行一些查询,以便在类似情况下比较两者的性能.

谁能告诉我最好的方法呢?我应该如何在Cassandra中建模数据库?

Edm*_*mon 5

Cassandra查询语言(CQL)ver.3.3提供了用于创建关系表的几乎精确副本的语义.这不是最规范的做事方式,但它肯定可以帮助你的情况,根据评论,这似乎是紧急的.

因此,使用CQL可以创建:

CREATE TABLE airport( id text PRIMARY KEY, airport text,  
  city text, state text, country text, lat float, long float);
Run Code Online (Sandbox Code Playgroud)

然后继续创建这样的其他表.

要将csv加载到表中,请使用:

COPY airport (id, airport, city, state, country, lat, long)  
FROM 'airport.csv' WITH DELIMITER = ';' AND HEADER = TRUE;
Run Code Online (Sandbox Code Playgroud)

不是在Cassandra中,您应该使用UUID并在加载值时生成这些UUID.

在我看来,飞机可以非规范化,所以我将它全部模型化为一个条目,其中飞机是超级列,引擎和类型是列.使用CQL 3.3,您可以通过这种方式对其进行建模,也可以为每种实体方式创建传统的表.

有关详细信息,请参阅此帖

笔记:

关于这些关系,您可能需要放弃基于主键(PK),外键(FK)概念和相关硬约束的关系概念.要将数据迁移到Cassandra NoSQL,您将不会依赖硬链接,而是依赖于这些实体的链接.您将体验到的唯一损失,就像从强类型语言转换为弱类型语言一样,将在数据库保证链接中.您仍然可以拥有自己的ID,仍然可以维护基于ID的链接,但不存在数据库强制完整性约束.您可以放弃自动生成的ID.以下是一些非常适用的阅读材料:

  1. 数据建模来自Datastax的CQL 3.3手册的最佳实践.

  2. 文章介绍了迁移的关系模式设计和卡桑德拉介绍一些通用设计理念的做法.

  3. 迁移最佳实践 - 从RDBMS到NoSQL/Cassandra.

  4. 该Datastax,背后卡桑德拉商业公司有很多伟大的教育资源和实用的建议在这里.