首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Cassandra用例的需求设计与实现输入

基于Cassandra用例的需求设计与实现输入
EN

Stack Overflow用户
提问于 2014-01-15 14:25:25
回答 2查看 393关注 0票数 1

我计划将大量订单交易记录从商业网站存储到存储库(这里必须使用cassandra,即我们的数据库)。让我们把这个组件称为commerceOrderRecorderService。

问题的第二部分是-我想处理这些订单,并推进到其他下游系统。这个组件可以称为batchCommerceOrderProcessor。

commerceOrderRecorderService和batchCommerceOrderProcessor都将在java平台上运行。

我需要对这些部件的设计提出建议。特别是以下几点:

commerceOrderRecorderService

  1. 考虑到性能和可伸缩性,他设计列的最佳方法是什么?是否应该将整个订单(复杂实体)存储为单个JSON对象。对订单属性没有搜索要求。我们至少可以等到批处理程序处理它们。考虑--单个订单可以包含多个子项--在处理时每个子项都可以以不同的方式完成。为这种数据结构设计列可能是过分的。
  2. 考虑到数据量很大,关键应该是什么。每秒钟10个事务,比如说在高峰期间。在cassandra中创建这样的事务性数据有哪些库或最佳实践?TTL也能被有效利用吗?

batchCommerceOrderProcessor

  1. 如何检索行以进行处理?
  2. 如何确保批处理程序的多个实现(可能也会在多个节点上运行)具有行级隔离。也就是说,没有两个实例会同时读取和处理同一行。没有重复处理。
  3. 如何在一段时间后清除数据,同时对诸如压实之类的cassandra过程友好。

欣赏设计输入、代码示例和指向库的指针。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-01-19 13:37:50

根据系统的总体需求,使用由以下内容组成的体系结构是可行的:

  1. Cassandra存储的命令,分析和你有什么。
  2. 消息队列-您的商业订单记录器服务将简单地将新订单排队到事务性队列和持久队列并返回。在这里,可伸缩性和性能不应该成为问题,因为使用单个队列服务器,您可以轻松地达到每秒数千个事务。您可能会看到RabbitMQ是可用的选择之一。
  3. 流处理框架--您可以使用诸如Twitter之类的流框架,以可伸缩的方式从队列中读取消息流。您可以在Java中实现,而不是在Storm中实现3个简单的流水线进程: ( a)从队列中排出下一个订单并将其传递给第二个进程的突发性进程 ( b)第二个过程称为螺栓,它将下一个订单插入卡桑德拉,并将其传递给第三个螺栓。 ( c)将订单推到其他下游系统的第三种螺栓工艺。

这种架构提供了高性能、可伸缩性和接近实时、低延迟的数据处理.它考虑到卡桑德拉在高速数据写入方面非常强大,但在读取连续记录列表方面却没有那么强。我们在我们的Storm+Cassandra MOCA平台中使用InnoQuant组合,并根据硬件处理25.000 tx/秒及更多。

最后,您应该考虑这样的架构是否会对您的场景造成过度的影响。现在,几乎任何单盒数据库都可以轻松地达到10 tx/秒。

票数 2
EN

Stack Overflow用户

发布于 2014-02-18 16:29:59

这个例子可能会有一点帮助。它使用jmxbulkloader加载大量事务,然后将结果批处理到一定大小的文件中,以便在其他地方传输。它是多线程的,但在相同的进程中。

https://github.com/PatrickCallaghan/datastax-bulkloader-writer-example

希望能帮上忙。顺便说一下,它使用的是最新的卡桑德拉2.0.5。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21139968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档