-
Notifications
You must be signed in to change notification settings - Fork 2
CN Store Server MariaDB Model
himulawang edited this page Oct 21, 2014
·
3 revisions
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"}
});
}