前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DawnSql快速入门

DawnSql快速入门

原创
作者头像
用户5383110
发布2023-02-25 21:42:47
8890
发布2023-02-25 21:42:47
举报
文章被收录于专栏:DawnSqlDawnSql

1、设置配置文件

1.1、配置文件的位置

安装文件解压后,进入 config 目录,配置文件:default-config.xml

1.2、设置超级管理员的 root token

代码语言:html
复制
 <!-- 超级管理员的 root token, 用户可以直接来设置一个 root token -->
 <!-- 本例中 root token 为 dafu -->
<property name="root_token" value="dafu"/>

DawnSql 中用户是通过 user_token 来区分用户之间的访问权限的。

例如:

在通过 jdbc 访问的时候,user_token 是必须要设置的。

代码语言:java
复制
        Class.forName("org.apache.ignite.IgniteJdbcDriver");
        String user_token = "my_token";
        String url = "jdbc:ignite:thin://127.0.0.1:10800/public?lazy=true&userToken=" + user_token;
        Connection conn = DriverManager.getConnection(url);

1.3、用户是否实现了 log 事务接口。默认是没有实现,这个需要用户根据自己的实际需求来实现。

代码语言:html
复制
<!-- 设置实现 log 事务接口的类 -->
<!--
<property name="myLogCls" value="org.gridgain.smart.logClient.MyLogTransactionClient"/>
-->

1.4、是否实现了初始化后就执行的方法

既数据库系统,初始化完成后,马上执行的方法

代码语言:html
复制
<!-- 设置启动的时候,初始化 rpc 服务器 -->
<!-- org.dawn.rpc.MyRpcStartImpl 是实现了 IDawnSqlStart 接口的类 -->
<!-- 不设置则不启动这个服务,具体代码可以参看开源的例子 -->
<property name="startAppCls" value="org.dawn.rpc.MyRpcStartImpl"/>

默认的是开启 DBeaverWeb 访问 DawnSql 集群(推荐使用) 的方法

具体使用方法:

  1. 设置完成后,进入安装文件目录下,启动 DawnSql 数据库: 安装并激活 DawnSql
  2. 下载 DBeaverWeb 的 war 包 下载 DBeaverWeb 的 war 包
  3. 启动 DBeaverWeb 启动 DBeaverWeb
  4. DBeaverWeb 的源码 DBeaverWeb 的源码

1.5、创建表的模板 (这个是必须要设置的)

例子中设置了两个模板:

base 模板:复制模式,支持事务

manage 模板:分区模式,同一份数据,在集群中备份 3 次,支持事务

代码语言:html
复制
<!-- 创建表的模板 -->
<property name="templateConfiguration">
    <map key-type="java.lang.String" value-type="org.apache.ignite.configuration.TableTemplateConfiguration">
        <entry key="base">
            <bean class="org.apache.ignite.configuration.TableTemplateConfiguration">
                <property name="templateValue" value="template=REPLICATED,ATOMICITY=TRANSACTIONAL"></property>
                <property name="description" value="复制模式,来保存数据!"></property>
            </bean>
        </entry>
        <entry key="manage">
            <bean class="org.apache.ignite.configuration.TableTemplateConfiguration">
                <property name="templateValue" value="template=partitioned,backups=3,ATOMICITY=TRANSACTIONAL"></property>
                <property name="description" value="分片模式,来保存数据!"></property>
            </bean>
        </entry>
    </map>
</property>

1.6、设置多用户组(默认是支持多用户组的)

代码语言:html
复制
        <!-- 是否启用多用户组 -->
        <property name="multiUserGroup" value="true"/>

1.7、添加其他节点

代码语言:html
复制
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="addresses">
                            <list>
                                <!-- 分布式环境替换实际的 ip 和 端口 -->
                                <!-- 例如:配置多个台机器机器 -->
                                <!-- 47500..47509 表示端口范围 -->
                                <!-- <value>ip地址一:47500..47509</value> -->
                                <!-- <value>ip地址二:47500..47509</value> -->
                                <!-- <value>ip地址三:47500..47509</value> -->
                                <value>127.0.0.1:47500..47509</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>

2、创建 schema

只有 root 用户,才能创建和修改 schema

创建 schema 有两种写法:

具体用法:

创建和删除 schema

代码语言:sql
复制
-- 创建 schema wudafu
create schema wudafu;

-- 或者
-- 创建 schema wudafu
create schema if not exists wudafu;

3、为 schema 添加用户组

只有 root 用户,才能设置用户组

具体用法:<a href=''></a>

添加删除用户组

代码语言:sql
复制
-- 添加用户组
add_user_group('wudafu_group', 'wudafu_token', 'all', 'wudafu');
-- 通过 user_token 获取用户组
get_user_group('wudafu_token');

add_user_group 为内置函数它有四个参数:第一个:用户组的名字,第二个:用户的 user_token 用户访问数据库,第三个:只能选择 all, dml, ddl,第四个:schema 的名字。

add_user_group 的意思是为 schema 添加一个用户组。包含:用户组名称、user_token 和它的操作权限。

4、添加表并插入数据

例如:用 root 的 token 或者是上面例子的 myy_token

如果用 DBeaverWeb 来操作,只需要输入 root 的 token 或者 myy_token</br>

如果用 JDBC 连接字符串为:jdbc:ignite:thin://127.0.0.1:10800/public?lazy=true&userToken=dafu

dafu 为上面 root 的 userToken

也可以用 myy_token ,因为它的有添加表的权限。

代码语言:sql
复制
DROP TABLE IF EXISTS public.Categories; 
-- 产品类型表
CREATE TABLE IF NOT EXISTS public.Categories (
     -- 产品类型ID
    CategoryID INTEGER NOT NULL auto,
    -- 产品类型名
    CategoryName VARCHAR(15) NOT NULL,
    -- 类型说明
    Description VARCHAR,
    -- 产品样本
    Picture VARCHAR,
    PRIMARY KEY (CategoryID)
) WITH "template=manage";

CREATE INDEX IF NOT EXISTS Categories_CategoryName_idx ON public.Categories (CategoryName);

INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Beverages','Soft drinks, coffees, teas, beers, and ales', '');
INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Condiments','Sweet and savory sauces, relishes, spreads, and seasonings', '');
INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Confections','Desserts, candies, and sweet breads', '');
INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Dairy Products','Cheeses', '');
INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Grains/Cereals','Breads, crackers, pasta, and cereal', '');
INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Meat/Poultry','Prepared meats', '');
INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Produce','Dried fruit and bean curd', '');
INSERT INTO public.Categories (CategoryName, Description, Picture) VALUES('Seafood','Seaweed and fish', '');

添加表要注意,如果是联合主键,可以按照业务的特点,将一个主键设置为 affinity_key

例如:

代码语言:sql
复制
-- 订单详情表
CREATE TABLE wudagui.OrderDetails (
    -- 订单编号
    OrderID INTEGER NOT NULL,
    -- 产品编号
    ProductID INTEGER NOT NULL,
    -- 单价
    UnitPrice DECIMAL(10,4) DEFAULT 0,
    -- 订购数量
    Quantity SMALLINT(2) DEFAULT 1,
    -- 折扣
    Discount REAL(8,0) NOT NULL,
    PRIMARY KEY (OrderID, ProductID)
) WITH "template=manage,affinity_key=ProductID";

affinity_key 亲和键,意思是将相同键值的数据,分配到同一节点。这样执行 SQL 的时候,同一节点的数据,就不需要移动了!

5、给用户组分配访问权限

具体用法:

给用户组分配访问权限

代码语言:sql
复制
-- 为用户组:wudafu_group,添加查询 public.Categories 表的权限。
-- 让其只能查询 CategoryName <> 'Seafood' 且只能查询列 CategoryName, Description 的数据
my_view('wudafu_group', "SELECT CategoryName, Description from public.Categories where CategoryName <> 'Seafood'");

用 wudafu_group 的 user_token: wudafu_token 登录 DBeaverWeb 查询 public.Categories 得到结果

rm_1.jpg
rm_1.jpg

实际结果是 8 条

rm_2.jpg
rm_2.jpg

权限视图实现的原理:通过方法将表和表的读写权限绑定到用户组,这样用户组执行 sql 语句的时候,就会去读取权限视图的 ast ,最后在组合成新 ast 执行。

6、NoSql 的支持

具体用法:

trans(Sql或者NoSql 的序列) 事务函数

代码语言:sql
复制
-- 创建一个分区的缓存
noSqlCreate({"table_name": "my_cache", "mode": "partitioned"});

-- 在缓存中,插入数据
noSqlInsert({"table_name": "my_cache", "key": "000A", "value": {"name": "吴大富", "age": 100}});

-- 读取缓存中的数据
noSqlGet({"table_name": "my_cache", "key": "000A"});

7、事务的支持

具体用法:

NoSql 的支持

代码语言:sql
复制
function update_table(CategoryID:int, CategoryName:string)
{
    let lst = [['update public.Categories set CategoryName = ? where UserID = ?', [CategoryName, CategoryID]]];
    lst.add(noSqlDeleteTran({"table_name": "my_cache", "key": CategoryID}));
    trans(lst);
}

执行事务需要调用 DawnSql 的 trans 方法。该方法会将序列中的 sql 或 no sql 都会转换成 key -value 形式,然后执行二阶段提交

8、DawnSql 语法的简介

具体用法:

DawnSql语法

代码语言:sql
复制
-- 1、输入一个字符串,输出一个前缀 DawnSql 的字符串
function my_str(line:string)
{
   concat('DawnSql ', line);
}

-- 2、当把 DawnSql函数中提交到数据后,就可以在 sql 和 DawnSql 中使用这个函数
select my_str(CATEGORYNAME) from PUBLIC.categories;
d_1.jpeg
d_1.jpeg
d_2.jpg
d_2.jpg

9、DawnSql 的扩展

具体用法:

DawnSql 的扩展

9.1、Java 代码

代码语言:java
复制
package org.dawnsql.lib;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MyUtil {

    public String getNow()
    {
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        System.out.println(simpleDateFormat.format(new Date(timestamp.getTime())));

        return simpleDateFormat.format(new Date(timestamp.getTime()));
    }
}

9.2、注册成 DawnSql 中的方法

代码语言:sql
复制
add_func({"method_name":"getNow","java_method_name":"getNow","cls_name":"org.dawnsql.lib.MyUtil","return_type":"String","descrip":"","lst":[]});

10、分布式定时任务

具体用法:

分布式定时任务

代码语言:sql
复制
-- 每隔两分钟,重复执行 30 次 getNow 方法
add_job('getNow', [], '{2,30} * * * * *');

定时任务中的任务,在集群中是负载均衡的,当节点故障时,定时任务会进行故障转移

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、设置配置文件
    • 1.1、配置文件的位置
      • 1.2、设置超级管理员的 root token
        • 1.3、用户是否实现了 log 事务接口。默认是没有实现,这个需要用户根据自己的实际需求来实现。
          • 1.4、是否实现了初始化后就执行的方法
            • 1.5、创建表的模板 (这个是必须要设置的)
              • 1.6、设置多用户组(默认是支持多用户组的)
                • 1.7、添加其他节点
                • 2、创建 schema
                • 3、为 schema 添加用户组
                • 4、添加表并插入数据
                • 5、给用户组分配访问权限
                • 6、NoSql 的支持
                • 7、事务的支持
                • 8、DawnSql 语法的简介
                • 9、DawnSql 的扩展
                  • 9.1、Java 代码
                    • 9.2、注册成 DawnSql 中的方法
                    • 10、分布式定时任务
                    相关产品与服务
                    访问管理
                    访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                    http://www.vxiaotou.com