Skip to content

Commit

Permalink
Add broadcast, sharding-cache and single java api doc (#29684)
Browse files Browse the repository at this point in the history
* Add broadcast, sharding-cache and single java api doc

* fix typo

* fix typo
  • Loading branch information
strongduanmu committed Jan 9, 2024
1 parent 6da7c4c commit d7a249f
Show file tree
Hide file tree
Showing 24 changed files with 432 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
+++
title = "广播表"
weight = 2
+++

广播表 Java API 规则配置允许用户直接通过编写 Java 代码的方式,完成 ShardingSphereDataSource 对象的创建,Java API 的配置方式非常灵活,不需要依赖额外的 jar 包就能够集成各种类型的业务系统。

## 参数解释

类名称:org.apache.shardingsphere.broadcast.api.config.BroadcastRuleConfiguration

可配置属性:

| *名称* | *数据类型* | *说明* | *默认值* |
|---------------------------|---------------------------------------------|------------|-------|
| tables (+) | Collection\<String\> | 广播表规则配置 | |

## 配置示例

广播表 Java API 配置示例如下:

```java
public final class ShardingDatabasesAndTablesConfigurationPrecise {

@Override
public DataSource getDataSource() throws SQLException {
return ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), Arrays.asList(createBroadcastRuleConfiguration()), new Properties());
}

private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("demo_ds_0", DataSourceUtil.createDataSource("demo_ds_0"));
result.put("demo_ds_1", DataSourceUtil.createDataSource("demo_ds_1"));
return result;
}

private BroadcastRuleConfiguration createBroadcastRuleConfiguration() {
return new BroadcastRuleConfiguration(Collections.singletonList("t_address"));
}
}
```

## 相关参考

- [YAML 配置:广播表](/cn/user-manual/shardingsphere-jdbc/yaml-config/rules/broadcast/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
+++
title = "Broadcast Table"
weight = 2
+++

## Background

The Java API rule configuration for broadcast, which allows users to create ShardingSphereDataSource objects directly by writing Java code, is flexible enough to integrate various types of business systems without relying on additional jar packages.

## Parameters

Class:org.apache.shardingsphere.broadcast.api.config.BroadcastRuleConfiguration

Attributes:

| *name* | *DataType* | *Description* | *Default Value* |
|---------------------------|---------------------------------------------|------------|-------|
| tables (+) | Collection\<String\> | Broadcast table rules | |

## Sample

The following is an example of the broadcast table Java API configuration:

```java
public final class ShardingDatabasesAndTablesConfigurationPrecise {

@Override
public DataSource getDataSource() throws SQLException {
return ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), Arrays.asList(createBroadcastRuleConfiguration()), new Properties());
}

private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("demo_ds_0", DataSourceUtil.createDataSource("demo_ds_0"));
result.put("demo_ds_1", DataSourceUtil.createDataSource("demo_ds_1"));
return result;
}

private BroadcastRuleConfiguration createBroadcastRuleConfiguration() {
return new BroadcastRuleConfiguration(Collections.singletonList("t_address"));
}
}
```

## Related References
- [YAML Configuration: Broadcast](/en/user-manual/shardingsphere-jdbc/yaml-config/rules/broadcast/)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "数据加密"
weight = 4
weight = 5
+++

## 背景信息
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "Encryption"
weight = 4
weight = 5
+++

## Background
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "数据脱敏"
weight = 5
weight = 6
+++

## 背景信息
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "Data Masking"
weight = 5
weight = 6
+++

## Background
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "混合规则"
weight = 9
weight = 10
+++

## 背景信息
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "Mixed Rules"
weight = 9
weight = 10
+++

## Background
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "读写分离"
weight = 2
weight = 3
+++

## 背景信息
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "Readwrite-splitting"
weight = 2
weight = 3
+++

## Background
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "影子库"
weight = 6
weight = 7
+++

## 背景信息
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = "Shadow DB"
weight = 6
weight = 7
+++

## Background
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
+++
title = "数据分片路由缓存"
weight = 11
+++

## 背景信息

该项功能为**实验性功能**,需要与数据分片功能同时使用。
数据分片路由缓存会将逻辑 SQL、分片键实际参数值、路由结果放入缓存中,以空间换时间,减少路由逻辑对 CPU 的使用。

建议仅在满足以下条件的情况下启用:
- 纯 OLTP 场景
- ShardingSphere 进程所在机器 CPU 已达到瓶颈
- CPU 开销主要在于 ShardingSphere 路由逻辑
- 所有 SQL 已经最优且每次 SQL 执行都能命中单一分片

在不满足以上条件的情况下使用,可能对 SQL 的执行延时不会有明显改善,同时会增加内存的压力。

## 参数解释

类名称:org.apache.shardingsphere.sharding.api.config.cache.ShardingCacheConfiguration

可配置属性:

| *名称* | *数据类型* | *说明* | *默认值* |
|-----------------------|------------------------------------------------------|----------------|-------|
| allowedMaxSqlLength | int | 允许缓存的 SQL 长度限制 | - |
| routeCache | org.apache.shardingsphere.sharding.api.config.cache.ShardingCacheOptionsConfiguration | 路由缓存 | - |

类名称:org.apache.shardingsphere.sharding.api.config.cache.ShardingCacheOptionsConfiguration

可配置属性:

| *名称* | *数据类型* | *说明* | *默认值* |
|-----------------------|------------------------------------------------------|----------------|-------|
| softValues | boolean | 是否软引用缓存值 | - |
| initialCapacity | int | 缓存初始容量 | - |
| maximumSize | int | 缓存最大容量 | - |

## 配置示例

```java
public final class ShardingDatabasesAndTablesConfigurationPrecise {

@Override
public DataSource getDataSource() throws SQLException {
return ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), Arrays.asList(createShardingRuleConfiguration(), createBroadcastRuleConfiguration())), new Properties());
}

private ShardingRuleConfiguration createShardingRuleConfiguration() {
ShardingRuleConfiguration result = new ShardingRuleConfiguration();
result.getTables().add(getOrderTableRuleConfiguration());
result.getTables().add(getOrderItemTableRuleConfiguration());
// ...
result.setShardingCache(new ShardingCacheConfiguration(512, new ShardingCacheConfiguration.RouteCacheConfiguration(65536, 262144, true)));
return result;
}

private ShardingTableRuleConfiguration getOrderTableRuleConfiguration() {
ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_order", "demo_ds_${0..1}.t_order_${[0, 1]}");
result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_id", "snowflake"));
result.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
return result;
}

private ShardingTableRuleConfiguration getOrderItemTableRuleConfiguration() {
ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_order_item", "demo_ds_${0..1}.t_order_item_${[0, 1]}");
result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_item_id", "snowflake"));
return result;
}

private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("demo_ds_0", DataSourceUtil.createDataSource("demo_ds_0"));
result.put("demo_ds_1", DataSourceUtil.createDataSource("demo_ds_1"));
return result;
}

private BroadcastRuleConfiguration createBroadcastRuleConfiguration() {
return new BroadcastRuleConfiguration(Collections.singletonList("t_address"));
}
}
```

## 相关参考

- [核心特性:数据分片](/cn/features/sharding/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
+++
title = "Cache for Sharding Route"
weight = 11
+++

## Background

This feature is **experimental** and needs to be used with the data sharding rule.
The cache for sharding route will put the logical SQL, the parameter value of the shard key, and the routing result into the cache, exchange space for time, and reduce CPU usage of the routing logic.

We recommend enabling it only if the following conditions are met:
- Pure OLTP scenarios.
- The CPU of the machine which deployed the ShardingSphere process has reached the bottleneck.
- Most of the CPUs are used by ShardingSphere routing logic.
- All SQLs are optimized and each SQL execution could be routed to a single data node.

If the above conditions are not met, the execution delay of SQL may not be significantly improved, and the memory pressure will be increased.

## Parameters

Class:org.apache.shardingsphere.sharding.api.config.cache.ShardingCacheConfiguration

Attributes:

| *name* | *DataType* | *Description* | *Default Value* |
|-----------------------|------------------------------------------------------|----------------|-------|
| allowedMaxSqlLength | int | 允许缓存的 SQL 长度限制 | - |
| routeCache | org.apache.shardingsphere.sharding.api.config.cache.ShardingCacheOptionsConfiguration | 路由缓存 | - |

Class:org.apache.shardingsphere.sharding.api.config.cache.ShardingCacheOptionsConfiguration

Attributes:

| *name* | *DataType* | *Description* | *Default Value* |
|-----------------------|------------------------------------------------------|----------------|-------|
| softValues | boolean | 是否软引用缓存值 | - |
| initialCapacity | int | 缓存初始容量 | - |
| maximumSize | int | 缓存最大容量 | - |

## Sample

```java
public final class ShardingDatabasesAndTablesConfigurationPrecise {

@Override
public DataSource getDataSource() throws SQLException {
return ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), Arrays.asList(createShardingRuleConfiguration(), createBroadcastRuleConfiguration())), new Properties());
}

private ShardingRuleConfiguration createShardingRuleConfiguration() {
ShardingRuleConfiguration result = new ShardingRuleConfiguration();
result.getTables().add(getOrderTableRuleConfiguration());
result.getTables().add(getOrderItemTableRuleConfiguration());
// ...
result.setShardingCache(new ShardingCacheConfiguration(512, new ShardingCacheConfiguration.RouteCacheConfiguration(65536, 262144, true)));
return result;
}

private ShardingTableRuleConfiguration getOrderTableRuleConfiguration() {
ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_order", "demo_ds_${0..1}.t_order_${[0, 1]}");
result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_id", "snowflake"));
result.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
return result;
}

private ShardingTableRuleConfiguration getOrderItemTableRuleConfiguration() {
ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_order_item", "demo_ds_${0..1}.t_order_item_${[0, 1]}");
result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_item_id", "snowflake"));
return result;
}

private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("demo_ds_0", DataSourceUtil.createDataSource("demo_ds_0"));
result.put("demo_ds_1", DataSourceUtil.createDataSource("demo_ds_1"));
return result;
}

private BroadcastRuleConfiguration createBroadcastRuleConfiguration() {
return new BroadcastRuleConfiguration(Collections.singletonList("t_address"));
}
}
```

## Related References

- [Core Feature: Data Sharding](/en/features/sharding/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
+++
title = "单表"
weight = 12
+++

## 背景信息

单表规则用于指定哪些单表需要被 ShardingSphere 管理,也可设置默认的单表数据源。

## 参数解释

类名称:org.apache.shardingsphere.single.api.config.SingleRuleConfiguration

可配置属性:

| *名称* | *数据类型* | *说明* | *默认值* |
|-----------------------|----------------------|---------|-------|
| tables (+) | Collection\<String\> | 单表规则列表 | - |
| defaultDataSource (?) | String | 单表默认数据源 | - |

## 操作步骤

1. 初始化 SingleRuleConfiguration;
2. 添加需要加载的单表,配置默认数据源。

## 配置示例

```java
SingleRuleConfiguration ruleConfig = new SingleRuleConfiguration();
ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), Arrays.asList(ruleConfig), new Properties());
```

## 相关参考

- [单表](/cn/features/sharding/concept/#单表)
Loading

0 comments on commit d7a249f

Please sign in to comment.