Skip to content

CN Store Server MariaDB Model

himulawang edited this page Oct 21, 2014 · 3 revisions

Store Server MariaDB Model

orm.dart配置

Map orm = {
    'User': {
        'Model': {
            'pk': [0],
            'column': [
                'id',
                'name',
                'email',
                'country',
                'city',
            ],
            'toAddFilter': [],
            'toSetFilter': [0],
            'toFullFilter': [],
            'toAbbFilter': [],
            'toListFilter': [],
        },
        'ModelStore': {
            'storeOrder': [
                {
                    'type': 'mariaDB',
                    'readWriteSeparate': false,
                    'sharding': true,
                    'shardMethod': 'CRC32',
                    'master': 'GameDB',
                    'slave': 'GameDBSlave',
                    'table': 'User',
                },
            ],
        },
    },
};

user.sql

DROP TABLE IF EXISTS `User`;
CREATE TABLE IF NOT EXISTS `User` (
  `id` bigint(20) NOT NULL,
  `name` varchar(16) NOT NULL,
  `email` varchar(32) NOT NULL,
  `country` varchar(16) NOT NULL,
  `city` varchar(16) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

store.dart配置

Map store = {
    'mariaDB': {
        'GameDB': [
            {'no': 0, 'host': 'localhost', 'port': 3306, 'usr': 'root', 'pwd': '123', 'db': 'i_dart', 'maxHandler': 5 },
            {'no': 1, 'host': 'localhost', 'port': 3306, 'usr': 'root', 'pwd': '123', 'db': 'i_dart', 'maxHandler': 5 },
        ],
        'GameDBSlave': [
            {'no': 0, 'host': 'localhost', 'port': 3306, 'usr': 'root', 'pwd': '123', 'db': 'i_dart', 'maxHandler': 5 },
            {'no': 1, 'host': 'localhost', 'port': 3306, 'usr': 'root', 'pwd': '123', 'db': 'i_dart', 'maxHandler': 5 },
        ],
    },
};

使用如下代码进行部署

import 'i_config/deploy.dart';
import 'i_config/orm.dart';
import '../bin/i_maker/lib_i_maker.dart';

void main() {
  IModelMaker modelMaker = new IModelMaker(deploy, orm);
  modelMaker.make();

  IStoreMaker storeMaker = new IStoreMaker(deploy, orm);
  storeMaker.makeServer();

  IUtilMaker utilMaker = new IUtilMaker(deploy);
  utilMaker.make();

  ILibraryMaker libMaker = new ILibraryMaker(deploy);
  libMaker.makeServer();
}

上述代码会在store目录下生成user_mdb_store.dart

使用方法如下:

main.dart

import 'lib_test.dart';

main() {
  // 将User1存入MariaDB
  User user1 = new User([1, 'ila', 'ila[at]ilaempire.com', 'Japan', 'Tokyo']);

  // 1是user1的id,分Shard时的依据
  UserMariaDBStore store = new UserMariaDBStore(1);
  store.add(user1);

  // 上述代码会将user1转换成MariaDB的SQL:
  // INSERT INTO `User` (`id`, `name`, `email`, `country`, `city`) VALUES (1, 'ila', 'ila[at]ilaempire.com', 'Japan', 'Tokyo');

  // 从Redis中获取User1
  UserMariaDBStore store = new UserMariaDBStore(1);

  // 转换成SQL:
  // SELECT `id`, `name`, `email`, `country`, `city` FROM `User` WHERE `id` = 1;
  store.get(1)
  .then((User user) {
    print(user.toFull());
    // {"id":1,"name":"ila","email":"ila[at]ilaempire.com","country":"Japan","city":"Tokyo"}
  });
}