Oceanus

58同城数据库中间件
授权协议 Apache
开发语言 Java
所属分类 数据库相关、 数据库调整和优化
软件类型 开源软件
地区 国产
投 递 者 牟慎之
操作系统 跨平台
开源组织 58同城
适用人群 未知
 软件概览

Oceanus 是 58 同城数据库中间件。

关于DB中间件

在DB存储需求中,尽管业务不同,技术难点还是类似的,开源世界有很多DB中间件,解决方案也以通用方案为主,满足业务需要为前提,支持各种类型的需求。

Oceanus致力于打造一个功能简单、可依赖、易于上手、易于扩展、易于集成的解决方案,甚至是平台化系统。拥抱开源,提供各类插件机制集成其他开源项目,新手可以在几分钟内上手编程,分库分表逻辑不再与业务紧密耦合,扩容有标准模式,减少意外错误的发生。

Oceanus内部名词定义

  • datanode:数据源节点。为一个数据源命名,配置链接属性、报警实现

  • namenode:数据源的簇。为一组数据源命名,指定这组数据源的负载方式、访问模式、权重

  • table:映射表。匹配解析sql中的table名称,命中table标签的name属性值后,会执行约定的路由逻辑

  • bean:实体。由其他标签引用,实体类必须有无参的构造函数

  • tracker:监控埋点。涉及到计算和IO的功能点都有监控点,自定义一个埋点实现类,当功能耗时超出预期时会执行其中的回调函数,便于监控和优化系统

为什么说Oceanus是非常易用的

Oceanus在设计时非常注重使用者的评价,配置结构近乎于和使用者交流约定业务规则,便于不同的人看同一套配置,互相理解流程。当配置文件编写完成后,编码就变得更加简单,只调用Oceanus客户端的几个方法就可以实现数据库操作,不再关心HA、报警、负载均衡、性能监控等问题。良好的用户视觉减少了分库分表在业务场景中的耦合度,对于编码者就像只对一个table操作,Oceanus负责进行sql解析、路由、sql重写。

如提交:    select * from user;

改写成:    select * from user0;
           select * from user1;
           select * from user2;
           select * from user3;

分发给不同的库(或者同库)执行,用户视觉如图:github

开源集成

“接地气,拥抱开源” 是Oceanus的设计原则之一,可以很好的集成到mybatis和hibernate中,只要引用其中的插件,编写Oceanus配置文件,然后改写各自的DataSource实现或ConnectionProvider即可做到集成。这样既用到了熟悉的ORM,又借助Oceanus实现了分库分表等功能。

待开发

不得不说Oceanus在设计上非常灵活,使得每一个细小的功能点都有极高的切入价值,比如Cache机制、全局的ID生成规则、资源可视化监控等等,把其中某一个点做得足够好,都会为整体产品带来质的提升,简化实际生产环境中的配套系统研发维护成本。

 相关资料
  • #互联网公司爆料# 58笔试通过但面试没有过,面试我的人首先问的还是数仓建模,我当时这方面还是刚学,不是很懂,问的建模细节还是不会,直接挂了,但整体还是可以的,薪资估计16起步吧,双非本科估计就是最低的白菜价

  • 问题内容: 我们正在多家商店中运行带有MySql后端的Java PoS(销售点)应用程序。我想保持商店中的数据库与主机服务器上的数据库同步。 商店中发生某些更改时,应在主机服务器上对其进行更新。我该如何实现? 问题答案: 复制不是很难创建。 这里有一些很好的教程: http://aciddrop.com/2008/01/10/step-by-step-how-to-setup-mysql-data

  • Porter 始于 2017 年,提供数据同步功能,但并不仅仅局限于数据同步,在随行付内部广泛使用。

  • 我正在尝试使用基于Kafka Connect的Confluent在几个MySQL数据库之间同步数据。我在源连接器配置中使用了“批量”作为模式,因为主键类型是 varchar,所以我无法使用递增模式。它工作正常,但我遇到了两个问题: 似乎它无法同步删除,当源数据库中的数据被删除时,接收器数据库没有任何变化。数据仍存在于接收器数据库中。 同步数据需要相当长的时间。就我而言,同步具有 2~4k 行的表大

  • 问题内容: 我在Sybase DB中有一个表,其中包含一列createdDateTime。我想要做的是计算在特定但正在累积的时间段之间创建了多少行,即: 7:00-7 : 15 7 : 00-7 :30 7:00-7:45 7: 00-8 :00 …依此类推,直到我有上次分组时间7:00-18:00。 有没有一种好的方法可以在SQL中执行一个查询,该查询将为我返回所有行以及所有行数: 时间听行创建

  • Firebase提供了它们在空闲层中支持最多100个同时连接的信息。 问题1)假设我的数据库中有一个表,应用程序用户可以在屏幕上看到该表。每当我更新表格时,内容的变化也会反映在应用程序中(在手机上)。由于最大同时连接数设置为100,这是否意味着Firebase一次只能为100个用户刷新内容(在用户端)? 问题2)有人知道用户在与实时数据库交互后保持连接状态的时间吗? (很遗憾,这个问题没有代码,但

  • 问题内容: 如果我有数据库和数据库,并且数据库下的表和数据库下的表,则可以在MySQL中创建数据库下的视图。如果是这样,您能告诉我语法吗? 两个数据库都在同一台计算机上。 问题答案:

  • 问题内容: 我想知道在InnoDB中是否可以有一个带有 外键的 引用另一个表的表? 如果是这样,该怎么办? 问题答案: 我在http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key- constraints.html 上没有看到任何限制。 因此,只需使用 otherdb.othertable ,您会很好。