我爱编程

Nuodb使用

2018-07-26  本文已影响0人  Q轩哥

一、NuoDB 介绍:

1、NuoDB系统设计目标为了配置、部署和管理一个或多个数据库在一个数据中心或云端。从概念角度NuoDB分三层:
Management Layer
SQL Layer
Data Layer
nuodb数据库有多个进程运行在这些层
集合NuoDB主机一起工作来支持一个或多个NuoDB数据库。  
默认情况下,当你开始NuoDB Broker,Broker定义NuoDB Domain。  
在大多数平台上NuoDB安装程序会自动启动一个Broker在操作系统启动时。
Management Layer
Name
Description
NuoDB Broker
这一进程管理Transaction Engines和Storge Managers,在NuoDB系统中独立于任何特定的数据库。  
默认情况下,当你开始一个broker,broker定义NuoDB domain。
NuoDB Agent
运行在一个特定的主机管理NuoDB进程与NuoDB broker通信了解系统状态
NuoDB Manager
基于文本的实用程序,用于管理NuoDB domain和database的所有方面。
NuoDB Console
一个基于web的GUI管理工具,默认情况运行在http://localhost:8080
NuoDB System Tray
GUI工具运行在Mac OSX和Windows用于启动NuoDB Console和检查更新。
NuoDB Loader
导入和导出数据的工具
SQL Layer
NuoDB Transaction Engine(TE)
提供应用程序访问单个NuoDB数据库。
处理来自客户的请求,缓存数据,协调其他te和NuoDB Storage。  
一个最小可行的NuoDB部署必须至少有一个TE运行。此外,一个TE只能作用于一个数据库,但是一个数据库可以有多个TE。
Data Layer
NuoDB Storage Manager(SM)
这一进程提供了数据的持久化,通过写入和管理数据到磁盘。  
处理从TES发送来的请求,同时发送异步消息到其他SM,提交数据到硬盘和维护内存中的副本数据。  
一个最小可行的NuoDB部署必须至少有一个SM运行。此外,每个SM只能维护一个数据库,但是一个数据库可以有多个SM。
Archive Directory
NuoDB Storage Manager写入数据到磁盘的目录。

2、NuoDB结构:
NuoDB使用一个独特的体系结构来实现高性能、灵活性、可伸缩性和事物服从。
NuoDB是怎样处理两个事务的情况下,部分数据库由于延迟的网络而被隔离,其中每个事务运行和提交事务前其他的事物能够定义和存在?如何确保Storage Manngers的持久化与当前的数据库保持一致?  
NuoDB架构使得transaction engines在内存中维护一个数据库的副本,和用于storage managers之间以及和transaction engines保持同步。所有NuoDB数据库的元素(数据、索引、元数据和事务状态)保存在一个有各种类型的atoms对象里。原子事务管理器(TMA)在系统中跟踪所有事务的启动事件和提交事件。TMA实例接收和发送消息与其它TMA,TEs和SMs。每个TE和SM都有一个 TMA实例。
Transaction:
NuoDB客户机应用程序在开始一个事物时在一个TE上记录这个启动的事务,这个TE送交本地的TE。同样的,当交易完成后,TE记录事务结束事件。所有TEs记录所有的开始和结束事件,使所有事务,在整个数据库可见。
特定数据库的所有TEs相互通信通过批处理、异步消息;关于事务状态变化的消息不需要确认。当两个独立事务操作时(例如,将值插入不同的表)他们不沟通。
How Conflicts Are Resolved:
冲突可能发生在特定的数据,比如试图更新相同的记录,或相同的值插入唯一的索引。如果一个原子的多个副本在流通中有一个冲突,单个原子的实例被指定为atom主席。atom主席充当裁判和解决操作数据的冲突。这种冲突解决的步骤如下:
本地记录或索引原子实例发送一个变更请求给记录或索引的atom chairman
主席收到变更请求并确定是否有冲突。
在这个沟通过程中,每一个变化是停滞不前的。
事务线程等待,直到atom chairman响应。
如果改变不冲突,则事物通过。
Commit protocol:
NuoDB数据库管理员可以设置一个最低水平的耐久性数据库和应用程序开发人员可能需要更高层次的耐久性为特定的应用程序。提交协议被指定为命令行选项。
日志的远程提交协议保证在事务提交之前至少有一个SM有副本的所有事务的变化。下面的列表描述了提交的步骤:
1.事务发出一个提交请求连接到TE(当地TE)。
2.当地的TE 发送一个预提交信息给SMs上的TMAs。
3.SMs接收一个预提交信息:
通过直接I/O刷新它的复制消息日志
发送一个CommitACK消息到本地TE的TMA
4.本地TE的TMA:
l接收至少一个“CommitACK”消息
发送一个"committed"消息到所有其他TMA
告诉TE它能够响应事物提交成功
因为提交序列性能至关重要,不批处理的消息,但立即寄出。
这个序列保证提交的事务做的所有更改都在持久存储至少在一个地方。如果所有的SMs服务数据库同时失效,在灾难发生前在归档原子中应用日志复制信息保存所有事物的变化。应用程序或数据库带有更高的耐久性要求需要提交协议,这需要从两个SMs接收"commit received"消息。

二、单机创建数据库:

1、登录到nuodbmgr

nuodbmgr --broker host --password administrator_password

2、创建storage manage

nuodb [domain] > start process sm host localhost database testDB

Process command-line options:

Archive directory: /opt/nuodb/samples/testData

Initialize archive: true

Started process: ....... [ pid = 9950 ]

2、创建Transaction Engine

nuodb [domain] > start process te host localhost database testDB

Process command-line options: --dba-user dba --dba-password dba

Started process: ...... [ pid = 9961 ]

3、登录到数据库

nuosql database@localhost --user dba --password dba

SQL> CREATE TABLE t1 (DATA varchar (100), CUR_TIME timestamp default('now'));

SQL> INSERT INTO t1 (DATA) VALUES ('Time of update is:');

SQL> SELECT * FROM t1;
DATA CUR_TIME


停止nuodb

Commands to stop NuoDB agent and console services

sudo service nuoagent stop
sudo service nuowebconsole stop

Commands to start NuoDB agent and console services

sudo service nuoagent restart
sudo service nuowebconsole start
create sequence receivedMessageId start with 1;创建序列
create table receivedMessage(receivedMessageId bigint GENERATED ALWAYS AS IDENTITY(receivedMessageId) PRIMARY KEY,
uniqueId string default null,
vendor string default null,
model string default null,
messageHead string default null,
messageInfo string default null,
protocolVersion string default null,
receivedTime timestamp default('now')
);

获得序列
select next value for RECEIVEDMESSAGE$IDENTITY_SEQUENCE as receivedMessageId from dual

三、多主机配置

Installation Command
nuodbmgr --broker localhost --password bird --command "apply domain license licenseFile </path/to/your/License_File>"
nuodbmgr --broker localhost --password bird --command "show domain license"
1、修改default.properties配置
Linux/Mac
$ /opt/nuodb/etc/default.properties
WINDOWS

c:\Program Files\nuodb\etc\default.properties

Host A:

portRange = 48005,48100 #or port range of your choice

Save your edits

Restart the nuoagent service

sudo service nuoagent restart

Host B-C:

broker = false
peer = <Host_A_IP_ADDRESS>
portRange = 48005,48100 #or port range of your choice

Save your edits

Restart the nuoagent service

sudo service nuoagent restart
2、连接NuoDB主机

By default, the NuoDB installation will automatically start a broker and domain for you.

The commands contained in this document will use the default password for that domain.

Always use the nuodbmgr utility when administering your domain and database from the command line.

Host A:

nuodbmgr --broker host --password bird
3、开启Storage Mannger

The following command will set Initialize archive to "true".

This must only be set to "true" the first time the Storage Manager is created otherwise your data will be overwritten.

nuodb [domain]> start process sm
Database: <DATABASE_NAME>
Host: <IP_ADDRESS_of_HOST_C>
Process command-line options: --dba-user <NAME> --dba-password <PASSWORD>
Archive directory: <PATH_TO_YOUR_DATA_DIRECTORY>
Initialize archive: true
4、开启Transaction Engine
nuodb [domain] > start process te
Database: <DATABASE_NAME>
Host: <IP_ADDRESS_of_HOST_B>
Process command-line options: --dba-user <NAME> --dba-password <PASSWORD>
启动控制台

上一篇下一篇

猜你喜欢

热点阅读