是否有任何工具可用于将Oracle表迁移到Cassandra DB?

alen0pnh  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(114)

如何将Oracle数据库模式、表和过程迁移到Cassandra?有什么工具可以做这项工作吗?

x6492ojm

x6492ojm1#

没有一种直接的方法来迁移数据,因为Oracle的关系模型与规范化的表不适合像Cassandra这样的数据库。
企业选择Cassandra是因为它可以通过非常快的读写操作互联网规模。为了实现这一点,每个表都针对读取进行了优化,使得数据存储在去规范化的表中。
在迁移数据之前,您需要对数据进行建模。在高层次上,这涉及:

步骤1-列出所有应用程序查询。
步骤2-对于每个应用程序查询,设计一个表,以便根据查询中的过滤器对数据进行分区。
步骤3-对于Cassandra中的每个表,从Oracle导出/卸载相关数据,然后批量加载到Cassandra。

例如,如果应用程序需要根据电子邮件地址获取用户的详细信息,我们需要设计一个按电子邮件分区的表,如下所示:

CREATE TABLE users_by_email (
    email text,
    name text,
    username text,
    phone text,
    address text,
    ...
    PRIMARY KEY (email)
)

使用此表模式,可以使用以下命令查询表:

SELECT * FROM users_by_email WHERE email = ?

如果应用程序需要根据用户名检索用户的详细信息,我们需要设计一个表,而不是像这样按用户名分区:

CREATE TABLE users_by_username (
    username text,
    name text,
    email text,
    phone text,
    address text,
    ...
    PRIMARY KEY (username)
)

并使用以下命令查询它:

SELECT * FROM users_by_username WHERE username = ?

使用反规范化,它确实意味着数据在多个表中重复,因此它是磁盘空间与读取性能之间的权衡。
完成Cassandra的数据模型后,可以通过多种方式迁移数据。以下是可能的解决方案的简短列表:
1.将数据从Oracle导出到CSV文件,然后使用DataStax Bulk Loader (DSBulk)批量加载到Cassandra。
1.编写一个Spark作业,从Oracle读取数据,转换数据以匹配Cassandra模式,然后使用Spark Cassandra connector加载数据。
1.编写一个Java应用程序(或您选择的语言),从Oracle读取并写入Cassandra。
如果您决定使用CSV,这里有一些DSBulk资源,其中包含示例,可以帮助您快速入门:

DSBulk是开源的,所以可以免费使用。干杯!干杯!

xbp102n0

xbp102n02#

不,没有工具,因为它不能自动完成,只有模式,你缺乏一些强制性的信息。
要使用Cassandra构建一个良好的数据模型,您需要了解应用程序查询,因为它基于WHERE子句,您将创建主键。
我为Pet Clinic Spring Application做了这件事,并为那些对流程和方法感兴趣的人创建了一个研讨会

在Cassandra.....

  • 没有关系,所以大多数外键将导致新表,您将在写入时连接,而不是在读取时连接(非规范化)
  • 目前还没有acid事务,所以操作应该尽可能地幂等。
  • 这里没有序列,您希望改为利用UUID
  • 没有存储过程,智能被移回应用程序。
  • 某些列可以是多值的(SetListMap),因此某些一对多关系可以在同一个表中完成。
  • 您可以根据查询设计表模型。大多数情况下,它是一个查询= 1个表。如果你需要用多个请求查询同一个数据,你可以在多个表中复制数据。(存储便宜)
    移动数据

在重新设计架构之后,您可以考虑将数据从Oracle迁移到Cassandra。有多种方法可以做到这一点:

  • 将Oracle数据导出为CSV,然后使用名为**DS-Bulk**的OSS工具导入
  • 使用Spark工作流以分布式方式移动数据
  • 使用Apache BeamJdbcIO作为输入,CassandraIO作为输出。

相关问题