{"id":66681,"date":"2022-08-24T09:00:34","date_gmt":"2022-08-24T09:00:34","guid":{"rendered":"https:\/\/www.cryptocabaret.com\/?p=66681"},"modified":"2022-08-24T09:00:34","modified_gmt":"2022-08-24T09:00:34","slug":"your-guide-to-distsqls-cluster-governance-capability","status":"publish","type":"post","link":"https:\/\/www.cryptocabaret.com\/?p=66681","title":{"rendered":"Your guide to DistSQL&#8217;s cluster governance capability"},"content":{"rendered":"<p><span class=\"field field--name-title field--type-string field--label-hidden\">Your guide to DistSQL&#8217;s cluster governance capability <\/span><br \/>\n<span class=\"field field--name-uid field--type-entity-reference field--label-hidden\"><a title=\"View user profile.\" href=\"https:\/\/opensource.com\/users\/raigor\" class=\"username\">Raigor Jiang<\/a><\/span><br \/>\n<span class=\"field field--name-created field--type-created field--label-hidden\">Wed, 08\/24\/2022 &#8211; 03:00<\/span><\/p>\n<div data-drupal-selector=\"rate-node-70161\" class=\"rate-widget-thumbs-up\" title=\"Register or Login to like.\">\n<div class=\"rate-thumbs-up-btn-up vote-pending\">1 reader likes this<\/div>\n<div class=\"rate-score\">1 reader likes this<\/div>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item\">\n<p>Apache ShardingSphere 5.0.0-Beta version with DistSQL made the project even more beloved by developers and ops teams for its advantages, such as dynamic effects, no restart, and elegant syntax close to standard SQL. With upgrades to 5.0.0 and 5.1.0, the ShardingSphere community has once again added abundant syntax to DistSQL, bringing more practical features.<\/p>\n<p>In this article, the community co-authors will share the latest functions of DistSQL from the perspective of cluster governance.<\/p>\n<h2>ShardingSphere clusters<\/h2>\n<p>In a typical cluster composed of ShardingSphere-Proxy, there are multiple compute nodes and storage nodes, as shown in the figure below.<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/shardingsphere2520chart_0.png\" width=\"675\" height=\"531\" alt=\"An illustrated diagram shows three distinct applications at the top, represented by rectangles containing \" business code. these each of link to two instances shardingsphere-proxy. between is a register center both proxies feed center. in addition proxy feeds four barrel-shaped distributed database resources labeled ds_0 ds_1 ds_2 and ds_3.><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>(Jiang Longtao and Lan Chengxiang, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>To make it easier to understand, in ShardingSphere, we refer to proxy as a <em>compute node<\/em> and proxy-managed distributed database resources (such as ds_0 or ds_1) as <em>resources<\/em> or <em>storage nodes<\/em>.<\/p>\n<p>Multiple proxy or compute nodes are connected to the same register center. They share configuration and rules, and they can sense each other&#8217;s online status. These compute nodes also share the underlying storage nodes, so they can perform read and write operations to the storage nodes at the same time. The user application is connected to any compute node and can perform equivalent operations.<\/p>\n<p>Through this cluster architecture, you can quickly scale proxy horizontally when compute resources are insufficient, reducing the risk of a single point of failure and improving system availability. The load-balancing mechanism can also be added between the application and compute node.<\/p>\n<\/p>\n<div class=\"embedded-resource-list callout-float-right\">\n<div class=\"field field--name-title field--type-string field--label-hidden field__item\">More great content<\/div>\n<div class=\"field field--name-links field--type-link field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/services\/training\/rh024-red-hat-linux-technical-overview?intcmp=7016000000127cYAAQ\">Free online course: RHEL technical overview<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/developers.redhat.com\/cheat-sheets\/advanced-linux-commands\/?intcmp=7016000000127cYAAQ\">Learn advanced Linux commands<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/cheat-sheets?intcmp=7016000000127cYAAQ\">Download cheat sheets<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/linux?intcmp=7016000000127cYAAQ\">Find an open source alternative<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/resources?intcmp=7016000000127cYAAQ\">Explore open source resources<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<h2>Compute node governance<\/h2>\n<p>Compute node governance is suitable for cluster mode. For more information about the ShardingSphere modes, please see <a href=\"https:\/\/medium.com\/codex\/your-detailed-guide-to-apache-shardingspheres-operating-modes-e50df1ee56e4\" target=\"_blank\" rel=\"noopener\">Your detailed guide to Apache ShardingSphere&#8217;s operating modes<\/a>.<\/p>\n<h2>Cluster preparation<\/h2>\n<p>Take a standalone simulation of three proxy compute nodes as an example. To use the mode, follow the configuration below:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">mode:<br>\ntype: Cluster<br>\nrepository:<br>\ntype: ZooKeeper<br>\nprops:<br>\nnamespace: governance_ds<br>\nserver-lists: localhost:<span class=\"nu0\">2181<\/span><br>\nretryIntervalMilliseconds: <span class=\"nu0\">500<\/span><br>\ntimeToLiveSeconds: <span class=\"nu0\">60<\/span><br>\nmaxRetries: <span class=\"nu0\">3<\/span><br>\noperationTimeoutMilliseconds: <span class=\"nu0\">500<\/span><br>\noverwrite: <span class=\"kw2\">false<\/span><\/div><\/div><\/pre>\n<p>Execute the <code>bootup<\/code> command separately:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"kw2\">sh<\/span> <span class=\"sy0\">%<\/span>SHARDINGSPHERE_PROXY_HOME<span class=\"sy0\">%\/<\/span>bin<span class=\"sy0\">\/<\/span>start.sh <span class=\"nu0\">3307<\/span><br><span class=\"kw2\">sh<\/span> <span class=\"sy0\">%<\/span>SHARDINGSPHERE_PROXY_HOME<span class=\"sy0\">%\/<\/span>bin<span class=\"sy0\">\/<\/span>start.sh <span class=\"nu0\">3308<\/span><br><span class=\"kw2\">sh<\/span> <span class=\"sy0\">%<\/span>SHARDINGSPHERE_PROXY_HOME<span class=\"sy0\">%\/<\/span>bin<span class=\"sy0\">\/<\/span>start.sh <span class=\"nu0\">3309<\/span><\/div><\/div><\/pre>\n<p>After the three proxy instances are successfully started, the compute node cluster is ready.<\/p>\n<h4>SHOW INSTANCE LIST<\/h4>\n<p>Use the client to connect to any compute node, such as 3307:<\/p>\n<pre>\n<span class=\"geshifilter\"><code class=\"bash geshifilter-bash\">mysql <span class=\"re5\">-h<\/span> 127.0.0.1 <span class=\"re5\">-P<\/span> <span class=\"nu0\">3307<\/span> <span class=\"re5\">-u<\/span> root <span class=\"re5\">-p<\/span><\/code><\/span><\/pre>\n<p>View the list of instances using <code>SHOW INSTANCE LIST<\/code>:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\">mysql<span class=\"sy0\">&gt;<\/span> <span class=\"kw1\">SHOW<\/span> INSTANCE LIST;<br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+---------+<\/span><br><span class=\"sy0\">|<\/span> instance_id \u00a0 \u00a0<span class=\"sy0\">|<\/span> host \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> port <span class=\"sy0\">|<\/span> <span class=\"kw1\">STATUS<\/span> \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+---------+<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3309 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3309<\/span> <span class=\"sy0\">|<\/span> enabled <span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3308 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3308<\/span> <span class=\"sy0\">|<\/span> enabled <span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3307 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3307<\/span> <span class=\"sy0\">|<\/span> enabled <span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+---------+<\/span><\/div><\/div><\/pre>\n<p>The above fields mean:<\/p>\n<ul>\n<li><code>instance_id<\/code>: The id of the instance, which is currently composed of host and port<\/li>\n<li><code>host<\/code>: Host address<\/li>\n<li><code>port<\/code>: Port number<\/li>\n<li><code>status<\/code>: The status of the instance, either enabled or disabled<\/li>\n<\/ul>\n<h4>DISABLE INSTANCE<\/h4>\n<p>Use a <code>DISABLE INSTANCE<\/code> statement to set the specified compute node to a disabled state. The statement does not terminate the process of the target instance but only virtually deactivates it.<\/p>\n<p><code>DISABLE INSTANCE<\/code> supports the following syntax forms:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">DISABLE INSTANCE 10.7.5.35<span class=\"sy0\">@<\/span>3308;<br><span class=\"co0\">#or<\/span><br>\nDISABLE INSTANCE <span class=\"re2\">IP<\/span>=10.7.5.35, <span class=\"re2\">PORT<\/span>=<span class=\"nu0\">3308<\/span>;<\/div><\/div><\/pre>\n<p>For example:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\">mysql<span class=\"sy0\">&gt;<\/span> DISABLE INSTANCE 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3308;<br>\nQuery OK<span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span> <span class=\"kw1\">ROWS<\/span> affected <span class=\"br0\">(<\/span><span class=\"nu0\">0.02<\/span> sec<span class=\"br0\">)<\/span><br>\nmysql<span class=\"sy0\">&gt;<\/span> <span class=\"kw1\">SHOW<\/span> INSTANCE LIST;<br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><br><span class=\"sy0\">|<\/span> instance_id \u00a0 \u00a0<span class=\"sy0\">|<\/span> host \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> port <span class=\"sy0\">|<\/span> <span class=\"kw1\">STATUS<\/span> \u00a0 <span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3309 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3309<\/span> <span class=\"sy0\">|<\/span> enabled \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3308 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3308<\/span> <span class=\"sy0\">|<\/span> disabled <span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3307 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3307<\/span> <span class=\"sy0\">|<\/span> enabled \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><\/div><\/div><\/pre>\n<p>After executing the <code>DISABLE INSTANCE<\/code> statement by querying again, you can see that the instance status of Port 3308 has been updated to <code>disabled<\/code>, indicating that the compute node has been disabled.<\/p>\n<p>If there is a client connected to <code>10.7.5.35@3308<\/code>, executing any SQL statement will prompt an exception:<\/p>\n<pre>\n<span class=\"geshifilter\"><code class=\"sql geshifilter-sql\"><span class=\"nu0\">1000<\/span> <span class=\"sy0\">-<\/span> Circuit break mode <span class=\"kw1\">IS<\/span> <span class=\"kw1\">ON<\/span><span class=\"sy0\">.<\/span><\/code><\/span><\/pre>\n<p>You are not allowed to disable the current compute node. If you send <code>10.7.5.35@3309<\/code> to <code>DISABLE INSTANCE 10.7.5.35@3309<\/code>, you will receive an exception prompt.<\/p>\n<h4>ENABLE INSTANCE<\/h4>\n<p>Use an <code>ENABLE INSTANCE<\/code> statement to set the specified compute node to an enabled state. <code>ENABLE INSTANCE<\/code> supports the following syntax forms:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">ENABLE INSTANCE 10.7.5.35<span class=\"sy0\">@<\/span>3308;<br><span class=\"co0\">#or<\/span><br>\nENABLE INSTANCE <span class=\"re2\">IP<\/span>=10.7.5.35, <span class=\"re2\">PORT<\/span>=<span class=\"nu0\">3308<\/span>;<\/div><\/div><\/pre>\n<p>For example:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\">mysql<span class=\"sy0\">&gt;<\/span> <span class=\"kw1\">SHOW<\/span> INSTANCE LIST;<br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><br><span class=\"sy0\">|<\/span> instance_id \u00a0 \u00a0<span class=\"sy0\">|<\/span> host \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> port <span class=\"sy0\">|<\/span> <span class=\"kw1\">STATUS<\/span> \u00a0 <span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3309 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3309<\/span> <span class=\"sy0\">|<\/span> enabled \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3308 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3308<\/span> <span class=\"sy0\">|<\/span> disabled <span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3307 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3307<\/span> <span class=\"sy0\">|<\/span> enabled \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><br>\nmysql<span class=\"sy0\">&gt;<\/span> ENABLE INSTANCE 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3308;<br>\nQuery OK<span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span> <span class=\"kw1\">ROWS<\/span> affected <span class=\"br0\">(<\/span><span class=\"nu0\">0.01<\/span> sec<span class=\"br0\">)<\/span><br>\nmysql<span class=\"sy0\">&gt;<\/span> <span class=\"kw1\">SHOW<\/span> INSTANCE LIST;<br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><br><span class=\"sy0\">|<\/span> instance_id \u00a0 \u00a0<span class=\"sy0\">|<\/span> host \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> port <span class=\"sy0\">|<\/span> <span class=\"kw1\">STATUS<\/span> \u00a0 <span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3309 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3309<\/span> <span class=\"sy0\">|<\/span> enabled \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3308 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3308<\/span> <span class=\"sy0\">|<\/span> enabled \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35@3307 <span class=\"sy0\">|<\/span> 10<span class=\"sy0\">.<\/span>7<span class=\"sy0\">.<\/span>5<span class=\"sy0\">.<\/span>35 <span class=\"sy0\">|<\/span> <span class=\"nu0\">3307<\/span> <span class=\"sy0\">|<\/span> enabled \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------------+-----------+------+----------+<\/span><\/div><\/div><\/pre>\n<p>After executing the <code>ENABLE INSTANCE<\/code> statement, you can query again and view that the instance state of Port 3308 has been restored to <code>enabled<\/code>.<\/p>\n<h2>How to manage compute node parameters<\/h2>\n<p>In our article <a href=\"https:\/\/dzone.com\/articles\/integrating-sctl-into-distsqls-ral-making-apache-s\" target=\"_blank\" rel=\"noopener\">Integrating SCTL into DISTSQL&#8217;s RAL: Making Apache ShardingSphere perfect for database management<\/a>, we explained the evolution of ShardingSphere control language (SCTL) to resource and rule administration language (RAL) and the new <code>SHOW VARIABLE<\/code> and <code>SET VARIABLE<\/code> syntax.<\/p>\n<p>However, in 5.0.0-Beta, the <code>VARIABLE<\/code> category of DistSQL RAL only contained only the following three statements:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">SET VARIABLE TRANSACTION_TYPE = xx; \uff08LOCAL, XA, BASE\uff09<br>\nSHOW VARIABLE TRANSACTION_TYPE;<br>\nSHOW VARIABLE CACHED_CONNECTIONS;<\/div><\/div><\/pre>\n<p>By listening to the community&#8217;s feedback, we noticed that querying and modifying the props configuration of proxy (located in <code>server.yaml<\/code>) is also a frequent operation. Therefore, we have added support for props configuration in DistSQL RAL since the 5.0.0 GA version.<\/p>\n<h4>SHOW VARIABLE<\/h4>\n<p>First, we&#8217;ll review how to configure props:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">props:<br>\nmax-connections-size-per-query: <span class=\"nu0\">1<\/span><br><br>\nkernel-executor-size: <span class=\"nu0\">16<\/span> \u00a0<span class=\"co0\"># Infinite by default.<\/span><br><br>\nproxy-frontend-flush-threshold: <span class=\"nu0\">128<\/span> \u00a0<span class=\"co0\"># The default value is 128.<\/span><br><br>\nproxy-opentracing-enabled: <span class=\"kw2\">false<\/span><br><br>\nproxy-hint-enabled: <span class=\"kw2\">false<\/span><br><br>\nsql-show: <span class=\"kw2\">false<\/span><br><br>\ncheck-table-metadata-enabled: <span class=\"kw2\">false<\/span><br><br>\nshow-process-list-enabled: <span class=\"kw2\">false<\/span><br><br><span class=\"co0\"># Proxy backend query fetch size. A larger value may increase the memory usage of ShardingSphere Proxy.<\/span><br><br><span class=\"co0\"># The default value is -1, which means set the minimum value for different JDBC drivers.<\/span><br><br>\nproxy-backend-query-fetch-size: <span class=\"re5\">-1<\/span><br><br>\ncheck-duplicate-table-enabled: <span class=\"kw2\">false<\/span><br><br>\nproxy-frontend-executor-size: <span class=\"nu0\">0<\/span> <span class=\"co0\"># Proxy frontend executor size. The default value is 0, which means let Netty decide.<\/span><br><br><span class=\"co0\"># Available options of proxy backend executor suitable: OLAP(default), OLTP. The OLTP option may reduce time cost of writing packets to client, but it may increase the latency of SQL execution<\/span><br><br><span class=\"co0\"># and block other clients if client connections are more than `proxy-frontend-executor-size`, especially executing slow SQL.<\/span><br><br>\nproxy-backend-executor-suitable: OLAP<br><br>\nproxy-frontend-max-connections: <span class=\"nu0\">0<\/span> <span class=\"co0\"># Less than or equal to 0 means no limitation.<\/span><br><br>\nsql-federation-enabled: <span class=\"kw2\">false<\/span><br><br><span class=\"co0\"># Available proxy backend driver type: JDBC (default), ExperimentalVertx<\/span><br><br>\nproxy-backend-driver-type: JDBC<\/div><\/div><\/pre>\n<p>Now, you can perform interactive queries by using the following syntax:<\/p>\n<pre>\n<span class=\"geshifilter\"><code class=\"bash geshifilter-bash\">SHOW VARIABLE PROXY_PROPERTY_NAME;<\/code><\/span><\/pre>\n<p>For example:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\">mysql<span class=\"sy0\">&gt;<\/span> <span class=\"kw1\">SHOW<\/span> VARIABLE MAX_CONNECTIONS_SIZE_PER_QUERY;<br><span class=\"sy0\">+<\/span><span class=\"co1\">--------------------------------+<\/span><br><span class=\"sy0\">|<\/span> max_connections_size_per_query <span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">--------------------------------+<\/span><br><span class=\"sy0\">|<\/span> <span class=\"nu0\">1<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">--------------------------------+<\/span><br><span class=\"nu0\">1<\/span> <span class=\"kw1\">ROW<\/span> <span class=\"kw1\">IN<\/span> <span class=\"kw1\">SET<\/span> <span class=\"br0\">(<\/span><span class=\"nu0\">0.00<\/span> sec<span class=\"br0\">)<\/span><br>\nmysql<span class=\"sy0\">&gt;<\/span> <span class=\"kw1\">SHOW<\/span> VARIABLE SQL_SHOW;<br><span class=\"sy0\">+<\/span><span class=\"co1\">----------+<\/span><br><span class=\"sy0\">|<\/span> sql_show <span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------+<\/span><br><span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">----------+<\/span><br><span class=\"nu0\">1<\/span> <span class=\"kw1\">ROW<\/span> <span class=\"kw1\">IN<\/span> <span class=\"kw1\">SET<\/span> <span class=\"br0\">(<\/span><span class=\"nu0\">0.00<\/span> sec<span class=\"br0\">)<\/span><br>\n\u2026\u2026<\/div><\/div><\/pre>\n<p>Note: For DistSQL syntax, parameter keys are separated by underscores.<\/p>\n<h4>SHOW ALL VARIABLES<\/h4>\n<p>Since there are plenty of parameters in proxy, you can also query all parameter values through <code>SHOW ALL VARIABLES<\/code>:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\">mysql<span class=\"sy0\">&gt;<\/span> <span class=\"kw1\">SHOW<\/span> <span class=\"kw1\">ALL<\/span> <span class=\"kw1\">VARIABLES<\/span>;<br><span class=\"sy0\">+<\/span><span class=\"co1\">---------------------------------------+----------------+<\/span><br><span class=\"sy0\">|<\/span> variable_name \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span> variable_value <span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">---------------------------------------+----------------+<\/span><br><span class=\"sy0\">|<\/span> sql_show \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> sql_simple \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> kernel_executor_size \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"nu0\">0<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> max_connections_size_per_query \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"nu0\">1<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> check_table_metadata_enabled \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_frontend_database_protocol_type <span class=\"sy0\">|<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_frontend_flush_threshold \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"nu0\">128<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_opentracing_enabled \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_hint_enabled \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> show_process_list_enabled \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> lock_wait_timeout_milliseconds \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"nu0\">50000<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_backend_query_fetch_size \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> check_duplicate_table_enabled \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_frontend_executor_size \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"nu0\">0<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_backend_executor_suitable \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span> OLAP \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_frontend_max_connections \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"nu0\">0<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> sql_federation_enabled \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> proxy_backend_driver_type \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span> JDBC \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> agent_plugins_enabled \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"sy0\">|<\/span> <span class=\"kw1\">FALSE<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> cached_connections \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"nu0\">0<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">|<\/span> transaction_type \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span> <span class=\"kw1\">LOCAL<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"sy0\">|<\/span><br><span class=\"sy0\">+<\/span><span class=\"co1\">---------------------------------------+----------------+<\/span><br><span class=\"nu0\">21<\/span> <span class=\"kw1\">ROWS<\/span> <span class=\"kw1\">IN<\/span> <span class=\"kw1\">SET<\/span> <span class=\"br0\">(<\/span><span class=\"nu0\">0.01<\/span> sec<span class=\"br0\">)<\/span><\/div><\/div><\/pre>\n<h4>SET VARIABLE<\/h4>\n<p>Dynamic management of resources and rules is a special advantage of DistSQL. Now you can also dynamically update props parameters by using the <code>SET VARIABLE<\/code> statement. For example:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"co0\">#Enable SQL log output<\/span><br>\nSET VARIABLE SQL_SHOW = <span class=\"kw2\">true<\/span>;<br><span class=\"co0\">#Turn on hint function<\/span><br>\nSET VARIABLE PROXY_HINT_ENABLED = <span class=\"kw2\">true<\/span>;<br><span class=\"co0\">#Open federal query<\/span><br>\nSET VARIABLE SQL_FEDERATION_ENABLED = <span class=\"kw2\">true<\/span>;<br>\n\u2026\u2026<\/div><\/div><\/pre>\n<p>The <code>SET VARIABLE<\/code> statement can modify the following parameters, but the new value takes effect only after the proxy restart:<\/p>\n<ul>\n<li><code>kernel_executor_size<\/code><\/li>\n<li><code>proxy_frontend_executor_size<\/code><\/li>\n<li><code>proxy_backend_driver_type<\/code><\/li>\n<\/ul>\n<p>The following parameters are read-only and cannot be modified:<\/p>\n<ul>\n<li><code>cached_connections<\/code><\/li>\n<\/ul>\n<p>Other parameters will take effect immediately after modification.<\/p>\n<h2>How to manage storage nodes<\/h2>\n<p>In ShardingSphere, storage nodes are not directly bound to compute nodes. One storage node may play different roles in different schemas at the same time, in order to implement different business logic. Storage nodes are always associated with a schema.<\/p>\n<p>For DistSQL, storage nodes are managed through <code>RESOURCE<\/code>-related statements, including:<\/p>\n<ul>\n<li><code>ADD RESOURCE<\/code><\/li>\n<li><code>ALTER RESOURCE<\/code><\/li>\n<li><code>DROP RESOURCE<\/code><\/li>\n<li><code>SHOW SCHEMA RESOURCES<\/code><\/li>\n<\/ul>\n<h2>Schema preparation<\/h2>\n<p><code>RESOURCE<\/code>-related statements only work on schemas, so before operating, you need to create and use the <code>USE<\/code> command to successfully select a schema:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">DROP DATABASE IF EXISTS sharding_db;<br>\nCREATE DATABASE sharding_db;<br>\nUSE sharding_db;<\/div><\/div><\/pre>\n<h4><strong>ADD RESOURCE<\/strong><\/h4>\n<p><code>ADD RESOURCE<\/code> supports the following syntax forms:<\/p>\n<ul>\n<li>Specify <code>HOST<\/code>, <code>PORT<\/code>, <code>DB<\/code><\/li>\n<\/ul>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">ADD RESOURCE resource_0 <span class=\"br0\">(<\/span><br><span class=\"re2\">HOST<\/span>=127.0.0.1,<br><span class=\"re2\">PORT<\/span>=<span class=\"nu0\">3306<\/span>,<br><span class=\"re2\">DB<\/span>=db0,<br><span class=\"re2\">USER<\/span>=root,<br><span class=\"re2\">PASSWORD<\/span>=root<br><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<ul>\n<li>Specify URL<\/li>\n<\/ul>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">ADD RESOURCE resource_1 <span class=\"br0\">(<\/span><br><span class=\"re2\">URL<\/span>=<span class=\"st0\">\"jdbc:mysql:\/\/127.0.0.1:3306\/db1?serverTimezone=UTC&amp;useSSL=false\"<\/span>,<br><span class=\"re2\">USER<\/span>=root,<br><span class=\"re2\">PASSWORD<\/span>=root<br><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<p>The above two syntax forms support the extension parameter <code>PROPERTIES<\/code>, which is used to specify the attribute configuration of the connection pool between the proxy and the storage node.<\/p>\n<p>For example:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">ADD RESOURCE resource_2 <span class=\"br0\">(<\/span><br><span class=\"re2\">HOST<\/span>=127.0.0.1,<br><span class=\"re2\">PORT<\/span>=<span class=\"nu0\">3306<\/span>,<br><span class=\"re2\">DB<\/span>=db2,<br><span class=\"re2\">USER<\/span>=root,<br><span class=\"re2\">PASSWORD<\/span>=root,<br>\nPROPERTIES<span class=\"br0\">(<\/span><span class=\"st0\">\"maximumPoolSize\"<\/span>=<span class=\"nu0\">10<\/span><span class=\"br0\">)<\/span><br><span class=\"br0\">)<\/span>,resource_3 <span class=\"br0\">(<\/span><br><span class=\"re2\">URL<\/span>=<span class=\"st0\">\"jdbc:mysql:\/\/127.0.0.1:3306\/db3?serverTimezone=UTC&amp;useSSL=false\"<\/span>,<br><span class=\"re2\">USER<\/span>=root,<br><span class=\"re2\">PASSWORD<\/span>=root,<br>\nPROPERTIES<span class=\"br0\">(<\/span><span class=\"st0\">\"maximumPoolSize\"<\/span>=<span class=\"nu0\">10<\/span>,<span class=\"st0\">\"idleTimeout\"<\/span>=<span class=\"st0\">\"30000\"<\/span><span class=\"br0\">)<\/span><br><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<p>Specifying Java Database Connectivity (JDBC) connection parameters, such as <code>useSSL<\/code>, is supported only with URL form.<\/p>\n<h4>ALTER RESOURCE<\/h4>\n<p>Use <code>ALTER RESOURCE<\/code> to modify the connection information of storage nodes, such as changing the size of a connection pool or modifying JDBC connection parameters.<\/p>\n<p>Syntactically, <code>ALTER RESOURCE<\/code> is identical to <code>ADD RESOURCE<\/code>.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\">ALTER RESOURCE resource_2 <span class=\"br0\">(<\/span><br><span class=\"re2\">HOST<\/span>=127.0.0.1,<br><span class=\"re2\">PORT<\/span>=<span class=\"nu0\">3306<\/span>,<br><span class=\"re2\">DB<\/span>=db2,<br><span class=\"re2\">USER<\/span>=root,<br>\nPROPERTIES<span class=\"br0\">(<\/span><span class=\"st0\">\"maximumPoolSize\"<\/span>=<span class=\"nu0\">50<\/span><span class=\"br0\">)<\/span><br><span class=\"br0\">)<\/span>,resource_3 <span class=\"br0\">(<\/span><br><span class=\"re2\">URL<\/span>=<span class=\"st0\">\"jdbc:mysql:\/\/127.0.0.1:3306\/db3?serverTimezone=GMT&amp;useSSL=false\"<\/span>,<br><span class=\"re2\">USER<\/span>=root,<br><span class=\"re2\">PASSWORD<\/span>=root,<br>\nPROPERTIES<span class=\"br0\">(<\/span><span class=\"st0\">\"maximumPoolSize\"<\/span>=<span class=\"nu0\">50<\/span>,<span class=\"st0\">\"idleTimeout\"<\/span>=<span class=\"st0\">\"30000\"<\/span><span class=\"br0\">)<\/span><br><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<p>Since modifying the storage node may cause metadata changes or application data exceptions, <code>ALTER RESOURCE<\/code> cannot be used to modify the target database of the connection. Only the following values can be modified:<\/p>\n<ul>\n<li>User name<\/li>\n<li>User password<\/li>\n<li><code>PROPERTIES<\/code> connection pool parameters<\/li>\n<li>JDBC parameters<\/li>\n<\/ul>\n<h4>DROP RESOURCE<\/h4>\n<p>Use <code>DROP RESOURCE<\/code> to delete storage nodes from a schema without deleting any data in the storage node. The statement example is as follows:<\/p>\n<pre>\n<span class=\"geshifilter\"><code class=\"bash geshifilter-bash\">DROP RESOURCE resource_0, resource_1;<\/code><\/span><\/pre>\n<p>To ensure data correctness, the storage node referenced by the rule cannot be deleted.<\/p>\n<p><code>t_order<\/code> is a sharding table, and its actual tables are distributed in <code>resource_0<\/code>and <code>resource_1<\/code>. When <code>resource_0<\/code> and <code>resource_1<\/code> are referenced by <code>t_order<\/code> sharding rules, they cannot be deleted.<\/p>\n<h4>SHOW SCHEMA RESOURCES<\/h4>\n<p><code>SHOW SCHEMA RESOURCES\u00a0<\/code>is used to query storage nodes in schemas and supports the following syntax forms:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"bash geshifilter-bash\"><span class=\"co0\">#Query the storage node in the current schema<\/span><br>\nSHOW SCHEMA RESOURCES;<br><span class=\"co0\">#Query the storage node in the specified schema<\/span><br>\nSHOW SCHEMA RESOURCES FROM sharding_db;<\/div><\/div><\/pre>\n<p>For example, add four storage nodes through the <code>ADD RESOURCE<\/code> command, and then execute a query:<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/distsql2520image25202.png\" width=\"675\" height=\"237\" alt=\"A table of output from a Show Schema Resources request shows 4 MySQL database resource from the same host and port, indicate their connection timeout in milliseconds, idle timeout in milliseconds, max lifetime in milliseconds, max pool size and minimum pool size. \"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>(Jiang Longtao and Lan Chengxiang, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>There are many columns in the query result, but here we only show part of them.<\/p>\n<h2>Conclusion<\/h2>\n<p>In this article, we have introduced you to the ways you can dynamically manage storage nodes through DistSQL.<\/p>\n<p>Unlike modifying YAML files, executing DistSQL statements happens in real time, and there is no need to restart the proxy or compute node, making online operations safer. Changes executed through DistSQL can be synchronized to other compute nodes in the cluster in real time through the register center. The client connected to any compute node can also query changes of storage nodes in real time.<\/p>\n<p>If you have any questions or suggestions about Apache ShardingSphere, please open an issue on the <a href=\"https:\/\/github.com\/apache\/shardingsphere\/issues\" target=\"_blank\" rel=\"noopener\">GitHub issue list<\/a>. If you are interested in contributing to the project, you&#8217;re very welcome to join the Apache ShardingSphere community.<\/p>\n<p>Apache ShardingSphere Project Links:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/apache\/shardingsphere\" target=\"_blank\" rel=\"noopener\">ShardingSphere Github<\/a><\/li>\n<li><a href=\"https:\/\/twitter.com\/ShardingSphere\" target=\"_blank\" rel=\"noopener\">ShardingSphere Twitter<\/a><\/li>\n<li><a href=\"https:\/\/join.slack.com\/t\/apacheshardingsphere\/shared_invite\/zt-sbdde7ie-SjDqo9~I4rYcR18bq0SYTg\" target=\"_blank\" rel=\"noopener\">ShardingSphere Slack<\/a><\/li>\n<li><a href=\"https:\/\/shardingsphere.apache.org\/community\/cn\/contribute\/\" target=\"_blank\" rel=\"noopener\">Contributor Guide<\/a><\/li>\n<\/ul>\n<p>This article originally appeared on <a href=\"https:\/\/faun.pub\/\" target=\"_blank\" rel=\"noopener\">FAUN<\/a> and is republished with permission.<\/p>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-field-article-subhead field--type-text-long field--label-hidden field__item\">\n<p>A feature update to Apache ShardingSphere\u00a0enhances the dynamic management of storage nodes.<\/p>\n<\/div>\n<div class=\"field field--name-field-lead-image field--type-entity-reference field--label-hidden field__item\">\n<article class=\"media media--type-image media--view-mode-caption\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/bus_cloud_database.png\" width=\"520\" height=\"292\" alt=\"Databases as a service\" title=\"Databases as a service\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Jason Baker. CC BY-SA 4.0.<\/p>\n<\/div>\n<\/article>\n<\/div>\n<div class=\"field field--name-field-tags field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/databases\" hreflang=\"en\">Databases<\/a><\/div>\n<\/p><\/div>\n<div class=\"field field--name-field-listicle-title field--type-string field--label-hidden field__item\">What to read next<\/div>\n<div class=\"field field--name-field-listicles field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/article\/21\/12\/apache-shardingsphere\" hreflang=\"und\">Learn more about distributed databases with ShardingSphere<\/a><\/div>\n<\/p><\/div>\n<div class=\"field field--name-field-default-license field--type-list-string field--label-hidden field__item\"><a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/\"><br \/>\n        <img decoding=\"async\" alt=\"Creative Commons License\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/08\/cc-by-sa--33.png\" title=\"This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.\"><\/a>This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.<\/div>\n<section class=\"field field--name-field-comments field--type-comment field--label-hidden comment-wrapper\">\n<div class=\"comments__count\">\n<div class=\"login\"><a href=\"https:\/\/opensource.com\/user\/register?absolute=1\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml&amp;absolute=1\">Login<\/a> to post a comment.<\/div>\n<\/p><\/div>\n<\/section>\n<p class=\"wpematico_credit\"><small>Powered by <a href=\"http:\/\/www.wpematico.com\" target=\"_blank\" rel=\"noopener\">WPeMatico<\/a><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Your guide to DistSQL&#8217;s cluster governance capability Raigor Jiang Wed, 08\/24\/2022 &#8211; 03:00 1 reader likes this 1 reader likes this Apache ShardingSphere 5.0.0-Beta version with DistSQL made the project even more beloved by developers and ops teams for its advantages, such as dynamic effects, no restart, and elegant syntax close to standard SQL. With [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":66682,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[307],"tags":[],"class_list":["post-66681","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source"],"_links":{"self":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/66681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66681"}],"version-history":[{"count":0,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/66681\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/media\/66682"}],"wp:attachment":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=66681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=66681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}