diff --git a/README.md b/README.md index 1540e82..cb19d8b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ http://overflowstack.github.io # Localization 中文: -http://www.cnblogs.com/unruledboy/p/DatabaseStack.html +https://github.com/unruledboy/DatabaseStack/blob/master/README.zh-cn.md # DatabaseStack database technology stack, including MS SQL Server, Azure etc. @@ -76,9 +76,6 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm - Pages - Log File - Write Ahead Log (WAL) - - Recovery - - Full - - Bulk-logged - Dirty Pages - Lazy Writer - Checkpoint @@ -179,11 +176,11 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm - Version Number - Effectively SQL Server version number - @@VERSION - - 130: SQL  Server 2016 - - 120: SQL  Server 2014 - - 110: SQL  Server 2012 - - 100: SQL  Server 2008 - - 90: SQL  Server 2005 + - 130: SQL Server 2016 + - 120: SQL Server 2014 + - 110: SQL Server 2012 + - 100: SQL Server 2008 + - 90: SQL Server 2005 - 80: SQL Server 2000 - Encryption - Copy @@ -337,6 +334,7 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm - Request - Stall - Stats + - Query Store - Cache - aging - Catalog Views @@ -390,14 +388,18 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm - IntelliSense - SSRS Charting (acquired Dundas charts) - SQL Server 2012 - - Columnstore Index - Sequence - THROW - SQL Server 2014 - In-memory Table + - Clustered Columnstore Index - SQL Server 2016 + - Columnstore Index + - In-memory OLTP - JSON - - Ploybase (connector to BigData) + - Query Store + - Temporal Tables + - Polybase (connector to BigData) - Always Encrypted - Editions - Express @@ -463,6 +465,8 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm - Access Control - SQL Inject - Backup + - Testing + - [tSQLt](http://tsqlt.org/) - [Oracle](https://www.oracle.com/database/) - [MySQL](https://www.mysql.com/) - [PostgreSQL](http://www.postgresql.org/) @@ -476,7 +480,6 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm - Blobs - Tables - Queues - - StorSimple - Files and Disks - StorSimple - SQL Data Warehouse diff --git a/README.zh-cn.md b/README.zh-cn.md index a1a3706..be51cdf 100644 --- a/README.zh-cn.md +++ b/README.zh-cn.md @@ -55,8 +55,8 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - [数据库规范化](https://en.wikipedia.org/wiki/Database_normalization) - 范式 - 第一范式 (1NF) - - 第二范式 (2NF) - - 第三范式 (3NF) + - 第二范式 (1NF) + - 第三范式 (1NF) - [事务](https://en.wikipedia.org/wiki/Database_transaction) - [ACID](https://en.wikipedia.org/wiki/ACID) - 原子性 @@ -65,31 +65,28 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - 持久性 - [MS SQL Server](http://www.microsoft.com/en-us/server-cloud/products/sql-server/) - SQL OS - - Memory Management - - Buffer Pool - - Deadlock detection - - Exception handling - - Schedulers - - InterOp + - 内存管理 + - 缓存池 + - 死锁检测 + - 异常处理 + - 调度器 + - 交互 - 存储引擎 - - Transaction Services - - File Manager - - Data File + - 事务服务 + - 文件管理 + - 数据文件 - Extents - Pages - - Log File + - 日志文件 - Write Ahead Log (WAL) - - Recovery - - Full - - Bulk-logged - - Dirty Pages + - 脏页 - Lazy Writer - Checkpoint - Log Sequence Number (LSN) - 关系引擎 - Query Processing - - Parser - - Optimizer + - 解析器 + - 优化器 - Stat - Hinting - Plan @@ -139,9 +136,9 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Read committed (默认) - READ_COMMITTED_SNAPSHOT - ON - - repeatable read - - OFF (default) - - Nonrepeatable read, phantom + - 可重复的读取 + - OFF (默认) + - 不可重复的读取 - Repeatable read - Snapshot - Database ALLOW_SNAPSHOT_ISOLATION ON @@ -151,8 +148,8 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Lock - 乐观锁 - 悲观锁 - - Exclusive - - Shared + - 排他 + - 共享 - Wait - Latch - 死锁 @@ -167,7 +164,7 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - 备份事务日志 - 影响备份类型 - 影响复制类型 - - 模式 + - Models - 简单 - Not point-in-time recovery - Minimum space @@ -182,11 +179,11 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - 版本 - 实际上就是SQL Server的版本 - @@VERSION - - 130: SQL  Server 2016 - - 120: SQL  Server 2014 - - 110: SQL  Server 2012 - - 100: SQL  Server 2008 - - 90: SQL  Server 2005 + - 130: SQL Server 2016 + - 120: SQL Server 2014 + - 110: SQL Server 2012 + - 100: SQL Server 2008 + - 90: SQL Server 2005 - 80: SQL Server 2000 - 加密 - 复制 @@ -233,7 +230,7 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Drop - 列 - columnstore - - Suitable for Data warehouse + - 适合数据仓库 - NTFS FileStream - Schema - 触发器 @@ -245,7 +242,7 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Key - Default - Synonym - - Sequence + - 序列 - 变量 - 本地变量 (@) - 全局变量 (@@) @@ -278,9 +275,9 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Security Levels - Linked Server - Service Broker - - Basics + - 基本知识 - Transactional message queue - - Objects + - 对象 - Message - Contract - Queue @@ -340,6 +337,7 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Request - Stall - Stats + - Query Store - Cache - aging - Catalog Views @@ -393,14 +391,18 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - IntelliSense - SSRS Charting (acquired Dundas charts) - SQL Server 2012 - - Columnstore Index - Sequence - THROW - SQL Server 2014 - In-memory Table + - Clustered Columnstore Index - SQL Server 2016 + - Columnstore Index + - In-memory OLTP - JSON - - Ploybase (connector to BigData) + - Query Store + - Temporal Tables + - Polybase (connector to BigData) - Always Encrypted - 产品版本 - Express @@ -466,6 +468,8 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Access Control - SQL Inject - Backup + - 测试 + - [tSQLt](http://tsqlt.org/) - [Oracle](https://www.oracle.com/database/) - [MySQL](https://www.mysql.com/) - [PostgreSQL](http://www.postgresql.org/) @@ -479,7 +483,6 @@ https://rawgit.com/unruledboy/DatabaseStack/master/ux/DatabaseStack.htm?locale=z - Blobs - Tables - Queues - - StorSimple - Files and Disks - StorSimple - SQL Data Warehouse diff --git a/index.js b/index.js index a1f9527..d39514f 100644 --- a/index.js +++ b/index.js @@ -57,21 +57,25 @@ var promisify = function promisify(object) { /** * Recursion to generate readme * @param object object + * @param string language * @param int deep * @return string */ -var buildReadme = function buildReadme(object, deep) { +var buildReadme = function buildReadme(object, language, deep) { var deeper = deep + 1; var deepString = "\t".repeat(deep) + "- "; var ret = []; + var lang = typeof object.languages == "undefined" ? object.name : object.languages[language]; + lang = lang || object.name; + ret.push((function(deepString, name, url, github) { var haveUrl = !!url; var haveGitHub = !!github; - return deepString + (haveUrl ? "[" : "") + object.name + (haveUrl ? "](" + url + ")" : "") + (haveGitHub ? " [\[GitHub\]](" + github + ")" : ""); - })(deepString, object.name, object.url, object.github)); + return deepString + (haveUrl ? "[" : "") + name + (haveUrl ? "](" + url + ")" : "") + (haveGitHub ? " [\[GitHub\]](" + github + ")" : ""); + })(deepString, lang, object.url, object.github)); if (object.children) { object.children.map(function(value, index) { - ret.push(buildReadme(value, deeper)); + ret.push(buildReadme(value, language, deeper)); }); } return ret.join("\n"); @@ -86,7 +90,7 @@ var actions = { */ updatestargazers: function updatestargazers() { return new Promise(function(resolve, reject) { - var originalData = JSON.parse(fs.readFileSync('./ux/DatabaseStack' + config.locale + '.json', "utf-8")); // Require will lock the file. + var originalData = JSON.parse(fs.readFileSync('./ux/DatabaseStack.json', "utf-8")); // Require will lock the file. var getGitHubApi = function(github) { var githubArray = github.split("/"); // I want a sprintf T_T @@ -139,7 +143,7 @@ var actions = { q.push({ // For some reason, the ``drain`` will not be called. noRequest: true }, function() { - fs.writeFileAsync('./ux/DatabaseStack' + config.locale + '.json', JSON.stringify(originalData), "utf-8").then(function() { + fs.writeFileAsync('./ux/DatabaseStack.json', JSON.stringify(originalData), "utf-8").then(function() { resolve(); }); }); @@ -151,40 +155,51 @@ var actions = { * @return Promise */ phantomjs: function phantomjs() { + var json = require('./ux/DatabaseStack.json'); var phantom = require('phantom'); - var ph; - var page; promisify(phantom); // What the fucking API - return phantom.createAsync().then(function(phantom) { - ph = phantom; - promisify(ph); - console.log("Created Phantomjs"); - return ph.createPageAsync(); - }).then(function(pg) { - page = pg; - promisify(pg); - return page.setAsync('viewportSize', { - width: pageWidth, - height: pageHeight + var resolver = Promise.defer(); + var buildByLanguage = function(language) { + var displayLanguage = language == "" ? "en" : language; + var ph; + var page; + return phantom.createAsync().then(function(phantom) { + ph = phantom; + promisify(ph); + console.log("Created Phantomjs for " + displayLanguage); + return ph.createPageAsync(); + }).then(function(pg) { + page = pg; + promisify(pg); + return page.setAsync('viewportSize', { + width: pageWidth, + height: pageHeight + }); + }).then(function() { + console.log("Set viewportSize"); + console.log("Opening " + httpServer + "?locale=" + language + " for " + displayLanguage); + return page.openAsync(httpServer + "?locale=" + language); + }).then(function(status) { + console.log("Rendered HTML, the image will be saved after 2 seconds."); + if (status == "success") { + return Promise.delay(2000); + } else { + throw status; + } + }).then(function() { + return page.renderAsync(path.join(__dirname, 'preview' + (language == "" ? "" : ".") + language + '.png')); + }).then(function() { + console.log("The image(" + displayLanguage + ") saved successfully!"); + page.close(); + ph.exit(); }); - }).then(function() { - console.log("Set viewportSize"); - return page.openAsync(httpServer); - }).then(function(status) { - console.log("Rendered HTML, the image will be saved after 2 seconds."); - if (status == "success") { - return Promise.delay(2000); - } else { - return reject(status); - } - }).then(function() { - return page.renderAsync(path.join(__dirname, 'preview' + config.locale + '.png')); - }).then(function() { - console.log("The image saved successfully!"); - page.close(); - ph.exit(); - }); + }; + resolver.promise.then(buildByLanguage("")); + for (var item in json.languages) { + resolver.promise.then(buildByLanguage(item)); + } + return resolver.promise; }, /** @@ -192,16 +207,24 @@ var actions = { * @return Promise */ readme: function readme() { - var json = require('./ux/DatabaseStack' + config.locale + '.json'); - return Promise.resolve().then(function() { - return fs.readFileAsync('./README' + config.locale + '.md', "utf-8"); - }).then(function(fileContent) { - var ret = buildReadme(json, 0); - fileContent = fileContent.replace(/<\!--BUILD_START-->[\d\D]+?<\!--BUILD_END-->/, "{%BuildStart%}") - return fs.writeFileAsync('./README' + config.locale + '.md', fileContent.replace("{%BuildStart%}", "\n\n" + ret + "\n\n", "utf-8")); - }).then(function() { - console.log('Readme built successfully!'); - }) + var json = require('./ux/DatabaseStack.json'); + var resolver = Promise.defer(); + var buildByLanguage = function(language) { + return Promise.resolve().then(function() { + return fs.readFileAsync('./README' + (language == "" ? "" : ".") + language + '.md', "utf-8"); + }).then(function(fileContent) { + var ret = buildReadme(json, language, 0); + fileContent = fileContent.replace(/<\!--BUILD_START-->[\d\D]+?<\!--BUILD_END-->/, "{%BuildStart%}") + return fs.writeFileAsync('./README' + (language == "" ? "" : ".") + language + '.md', fileContent.replace("{%BuildStart%}", "\n\n" + ret + "\n\n", "utf-8")); + }).then(function() { + console.log('Readme' + (language == "" ? "" : ":") + language + ' built successfully!'); + }) + }; + resolver.promise.then(buildByLanguage("")); + for (var item in json.languages) { + resolver.promise.then(buildByLanguage(item)); + } + return resolver.promise; }, /** * To start an express server @@ -214,10 +237,10 @@ var actions = { .set('view engine', 'html') .use(express.static(path.join(__dirname, '/ux'))) .use('/', function(req, res) { - res.redirect('/DatabaseStack.htm?locale=' + config.rawLocale); + res.redirect('/DatabaseStack.htm?locale=' + req.query.locale); }) .listen(config.port, function() { - console.info('Express started on: http://127.0.0.1:' + config.port + '?locale=' + config.rawLocale); + console.info('Express started on: http://127.0.0.1:' + config.port); resolver(app); }); }); @@ -239,6 +262,7 @@ process.argv.forEach(function(val) { var promise = Promise.all(queue); if (queue.length > 1) { // for somebody who only want to start the server. + console.log("You can press Ctrl+C to exit if tasks finished.") promise.then(function() { console.log("OK!"); process.exit(0); diff --git a/preview.png b/preview.png index 74835c4..9f90750 100644 Binary files a/preview.png and b/preview.png differ diff --git a/preview.zh-cn.png b/preview.zh-cn.png index 22e21c1..72308a4 100644 Binary files a/preview.zh-cn.png and b/preview.zh-cn.png differ diff --git a/ux/DatabaseStack.htm b/ux/DatabaseStack.htm index 1c9aae8..61289f7 100644 --- a/ux/DatabaseStack.htm +++ b/ux/DatabaseStack.htm @@ -83,8 +83,8 @@ } - - + + @@ -92,7 +92,7 @@

Wilson Chen (twitter@unruleboy) - unruledboy@gmail.com

diff --git a/ux/DatabaseStack.json b/ux/DatabaseStack.json index 527d5a4..629d91f 100644 --- a/ux/DatabaseStack.json +++ b/ux/DatabaseStack.json @@ -1,11 +1,20 @@ { "name": "Database", + "languages": { + "zh-cn": "数据库" + }, "children": [ { "name": "RDBMS", + "languages": { + "zh-cn": "关系型数据库系统" + }, "children": [ { "name": "Simple", + "languages": { + "zh-cn": "简单" + }, "children": [ { "name": "dBase ;-)", @@ -32,6 +41,9 @@ }, { "name": "Basics", + "languages": { + "zh-cn": "基本知识" + }, "children": [ { "name": "Edgar F. Codd", @@ -39,34 +51,81 @@ }, { "name": "Object/relational mapping (O/RM)", + "languages": { + "zh-cn": "对象关系映射 (O/RM)" + }, "url": "https://en.wikipedia.org/wiki/Object-relational_mapping" }, { "name": "Normalisation", + "languages": { + "zh-cn": "数据库规范化" + }, "url": "https://en.wikipedia.org/wiki/Database_normalization", "children": [ { "name": "Normal Form", + "languages": { + "zh-cn": "范式" + }, "children": [ - { "name": "First Normal Form (1NF)" }, - { "name": "Second Normal Form (2NF)" }, - { "name": "Third Normal Form (3NF)" } + { + "name": "First Normal Form (1NF)", + "languages": { + "zh-cn": "第一范式 (1NF)" + } + }, + { + "name": "Second Normal Form (2NF)", + "languages": { + "zh-cn": "第二范式 (1NF)" + } + }, + { + "name": "Third Normal Form (3NF)", + "languages": { + "zh-cn": "第三范式 (1NF)" + } + } ] } ] }, { "name": "Transaction", + "languages": { + "zh-cn": "事务" + }, "url": "https://en.wikipedia.org/wiki/Database_transaction", "children": [ { "name": "ACID", "url": "https://en.wikipedia.org/wiki/ACID", "children": [ - { "name": "Atomicity" }, - { "name": "Consistency" }, - { "name": "Isolation" }, - { "name": "Durability" } + { + "name": "Atomicity", + "languages": { + "zh-cn": "原子性" + } + }, + { + "name": "Consistency", + "languages": { + "zh-cn": "一致性" + } + }, + { + "name": "Isolation", + "languages": { + "zh-cn": "隔离性/独立性" + } + }, + { + "name": "Durability", + "languages": { + "zh-cn": "持久性" + } + } ] } ] @@ -80,34 +139,83 @@ { "name": "SQL OS", "children": [ - { "name": "Memory Management" }, - { "name": "Buffer Pool" }, - { "name": "Deadlock detection" }, - { "name": "Exception handling" }, - { "name": "Schedulers" }, - { "name": "InterOp" } + { + "name": "Memory Management", + "languages": { + "zh-cn": "内存管理" + } + }, + { + "name": "Buffer Pool", + "languages": { + "zh-cn": "缓存池" + } + }, + { + "name": "Deadlock detection", + "languages": { + "zh-cn": "死锁检测" + } + }, + { + "name": "Exception handling", + "languages": { + "zh-cn": "异常处理" + } + }, + { + "name": "Schedulers", + "languages": { + "zh-cn": "调度器" + } + }, + { + "name": "InterOp", + "languages": { + "zh-cn": "交互" + } + } ] }, { "name": "Storage Engine", + "languages": { + "zh-cn": "存储引擎" + }, "children": [ - { "name": "Transaction Services" }, - { "name": "File Manager" }, - { "name": "Data File" }, + { + "name": "Transaction Services", + "languages": { + "zh-cn": "事务服务" + } + }, + { + "name": "File Manager", + "languages": { + "zh-cn": "文件管理" + } + }, + { + "name": "Data File", + "languages": { + "zh-cn": "数据文件" + } + }, { "name": "Extents" }, { "name": "Pages" }, { "name": "Log File", + "languages": { + "zh-cn": "日志文件" + }, "children": [ { "name": "Write Ahead Log (WAL)" }, { - "name": "Recovery", - "children": [ - { "name": "Full" }, - { "name": "Bulk-logged" } - ] + "name": "Dirty Pages", + "languages": { + "zh-cn": "脏页" + } }, - { "name": "Dirty Pages" }, { "name": "Lazy Writer" }, { "name": "Checkpoint" }, { "name": "Log Sequence Number (LSN)" } @@ -117,13 +225,27 @@ }, { "name": "Relational Engine", + "languages": { + "zh-cn": "关系引擎" + }, "children": [ { "name": "Query Processing", + "languages": { + "zh-cn": "" + }, "children": [ - { "name": "Parser" }, + { + "name": "Parser", + "languages": { + "zh-cn": "解析器" + } + }, { "name": "Optimizer", + "languages": { + "zh-cn": "优化器" + }, "children": [ { "name": "Stat" }, { "name": "Hinting" }, @@ -150,6 +272,9 @@ }, { "name": "Communication", + "languages": { + "zh-cn": "通讯" + }, "children": [ { "name": "SQL Server Network Interface (SNI)" }, { "name": "Tabular Data Stream (TDS)" }, @@ -167,45 +292,104 @@ }, { "name": "Core Concepts", + "languages": { + "zh-cn": "概念" + }, "children": [ { "name": "Instance", + "languages": { + "zh-cn": "实例" + }, "children": [ - { "name": "Default" }, - { "name": "Named" }, - { "name": "Alias" } + { + "name": "Default", + "languages": { + "zh-cn": "默认" + } + }, + { + "name": "Named", + "languages": { + "zh-cn": "命名" + } + }, + { + "name": "Alias", + "languages": { + "zh-cn": "别名" + } + } ] }, { "name": "Port", + "languages": { + "zh-cn": "端口" + }, "children": [ - { "name": "Default: 1433" }, - { "name": "Dynamic" } + { + "name": "Default: 1433", + "languages": { + "zh-cn": "默认: 1433" + } + }, + { + "name": "Dynamic", + "languages": { + "zh-cn": "动态" + } + } ] }, { "name": "Transaction", + "languages": { + "zh-cn": "事务" + }, "children": [ { "name": "ACID", "children": [ - { "name": "Atomic" }, - { "name": "Consistent" }, - { "name": "Isolated" }, - { "name": "Durable" } + { + "name": "Atomic" + }, + { + "name": "Consistent" + }, + { + "name": "Isolated" + }, + { + "name": "Durable" + } ] }, { "name": "Types", + "languages": { + "zh-cn": "类型" + }, "children": [ { "name": "Implicit", + "languages": { + "zh-cn": "隐式" + }, "children": [ - { "name": "single UPDATE/DELETE" } + { + "name": "single UPDATE/DELETE", + "languages": { + "zh-cn": "单个 UPDATE/DELETE" + } + } ] }, { "name": "Explicit", + "languages": { + "zh-cn": "显式" + }, "children": [ { "name": "BEGIN/COMMIT/ROLLBACK" } ] @@ -215,17 +399,33 @@ { "name": "Checkpoint" }, { "name": "Isolation Levels (low to high)", + "languages": { + "zh-cn": "隔离级别 (从低到高)" + }, "url": "https://technet.microsoft.com/en-us/library/ms189122(v=sql.105).aspx", "children": [ { "name": "Read uncommitted", "children": [ - { "name": "dirty read" }, - { "name": "same as NOLOCK hint" } + { + "name": "dirty read", + "languages": { + "zh-cn": "脏读" + } + }, + { + "name": "same as NOLOCK hint", + "languages": { + "zh-cn": "和NOLOCK一样" + } + } ] }, { "name": "Read committed (default)", + "languages": { + "zh-cn": "Read committed (默认)" + }, "children": [ { "name": "READ_COMMITTED_SNAPSHOT", @@ -233,20 +433,35 @@ { "name": "ON", "children": [ - { "name": "repeatable read" } + { + "name": "repeatable read", + "languages": { + "zh-cn": "可重复的读取" + } + } ] }, { "name": "OFF (default)", + "languages": { + "zh-cn": "OFF (默认)" + }, "children": [ - { "name": "Nonrepeatable read, phantom" } + { + "name": "Nonrepeatable read, phantom", + "languages": { + "zh-cn": "不可重复的读取" + } + } ] } ] } ] }, - { "name": "Repeatable read" }, + { + "name": "Repeatable read" + }, { "name": "Snapshot", "children": [ @@ -254,78 +469,167 @@ { "name": "2005+" } ] }, - { "name": "Serializable" } + { + "name": "Serializable" + } ] } ] }, { "name": "Concurrency", + "languages": { + "zh-cn": "并发性" + }, "children": [ { "name": "Lock", + "languages": { + "zh-cn": "" + }, "children": [ - { "name": "Optimistic" }, - { "name": "Pessimistic" }, - { "name": "Exclusive" }, - { "name": "Shared" } + { + "name": "Optimistic", + "languages": { + "zh-cn": "乐观锁" + } + }, + { + "name": "Pessimistic", + "languages": { + "zh-cn": "悲观锁" + } + }, + { + "name": "Exclusive", + "languages": { + "zh-cn": "排他" + } + }, + { + "name": "Shared", + "languages": { + "zh-cn": "共享" + } + } ] }, { "name": "Wait" }, { "name": "Latch" }, { "name": "Deadlock", + "languages": { + "zh-cn": "死锁" + }, "children": [ { "name": "Kill" } ] }, { "name": "sync/async" }, { "name": "Blocking" }, - { "name": "Row versioning" } + { + "name": "Row versioning", + "languages": { + "zh-cn": "行版本" + } + } ] } ] }, { "name": "Core Objects", + "languages": { + "zh-cn": "对象" + }, "children": [ { "name": "Database", + "languages": { + "zh-cn": "数据库" + }, "children": [ { "name": "Recovery Models", + "languages": { + "zh-cn": "恢复模式" + }, "children": [ { "name": "Purpose", + "languages": { + "zh-cn": "作用" + }, "children": [ - { "name": "Backup transaction log" }, - { "name": "Affect backup types" }, - { "name": "Affect replication types" } + { + "name": "Backup transaction log", + "languages": { + "zh-cn": "备份事务日志" + } + }, + { + "name": "Affect backup types", + "languages": { + "zh-cn": "影响备份类型" + } + }, + { + "name": "Affect replication types", + "languages": { + "zh-cn": "影响复制类型" + } + } ] }, { "name": "Models", + "languages": { + "zh-cn": "" + }, "children": [ { "name": "Simple", + "languages": { + "zh-cn": "简单" + }, "children": [ - { "name": "Not point-in-time recovery" }, - { "name": "Minimum space" } + { + "name": "Not point-in-time recovery" + }, + { + "name": "Minimum space" + } ] }, { "name": "Full (default)", + "languages": { + "zh-cn": "完整 (默认)" + }, "children": [ - { "name": "Point-in-time recovery" }, - { "name": "Large space" } + { + "name": "Point-in-time recovery" + }, + { + "name": "Large space" + } ] }, { "name": "Bulk logged", + "languages": { + "zh-cn": "大容量日志恢复" + }, "children": [ - { "name": "Point-in-time recovery" }, - { "name": "No bulk operation logged" }, - { "name": "Save space" } + { + "name": "Point-in-time recovery" + }, + { + "name": "No bulk operation logged" + }, + { + "name": "Save space" + } ] } ] @@ -334,58 +638,141 @@ }, { "name": "Compatibility Levels", + "languages": { + "zh-cn": "兼容级别" + }, "children": [ { "name": "Version Number", + "languages": { + "zh-cn": "版本" + }, "children": [ - { "name": "Effectively SQL Server version number" }, + { + "name": "Effectively SQL Server version number", + "languages": { + "zh-cn": "实际上就是SQL Server的版本" + } + }, { "name": "@@VERSION" } ] }, - { "name": "130: SQL  Server 2016" }, - { "name": "120: SQL  Server 2014" }, - { "name": "110: SQL  Server 2012" }, - { "name": "100: SQL  Server 2008" }, - { "name": "90: SQL  Server 2005" }, + { "name": "130: SQL Server 2016" }, + { "name": "120: SQL Server 2014" }, + { "name": "110: SQL Server 2012" }, + { "name": "100: SQL Server 2008" }, + { "name": "90: SQL Server 2005" }, { "name": "80: SQL Server 2000" } ] }, - { "name": "Encryption" }, - { "name": "Copy" } + { + "name": "Encryption", + "languages": { + "zh-cn": "加密" + } + }, + { + "name": "Copy", + "languages": { + "zh-cn": "复制" + } + } ] }, { "name": "Table", + "languages": { + "zh-cn": "表" + }, "children": [ { "name": "Standard", + "languages": { + "zh-cn": "标准" + }, "children": [ - { "name": "Partition" }, - { "name": "Compression" } + { + "name": "Partition", + "languages": { + "zh-cn": "分区" + } + }, + { + "name": "Compression", + "languages": { + "zh-cn": "压缩" + } + } ] }, - { "name": "Table Variable" }, + { + "name": "Table Variable", + "languages": { + "zh-cn": "表变量" + } + }, { "name": "Temp Table", + "languages": { + "zh-cn": "临时表" + }, "children": [ - { "name": "Local" }, - { "name": "Global" } + { + "name": "Local", + "languages": { + "zh-cn": "本地" + } + }, + { + "name": "Global", + "languages": { + "zh-cn": "全局" + } + } ] }, - { "name": "FileTable" } + { + "name": "FileTable" + } ] }, { "name": "View", + "languages": { + "zh-cn": "视图" + }, "children": [ - { "name": "Standard" }, - { "name": "Indexed" }, - { "name": "Partitioned" } + { + "name": "Standard", + "languages": { + "zh-cn": "标准" + } + }, + { + "name": "Indexed", + "languages": { + "zh-cn": "索引" + } + }, + { + "name": "Partitioned", + "languages": { + "zh-cn": "分区" + } + } ] }, - { "name": "Stored Procedure (SP)" }, + { + "name": "Stored Procedure (SP)", + "languages": { + "zh-cn": "存储过程 (SP)" + } + }, { "name": "Function (FN)", + "languages": { + "zh-cn": "函数 (FN)" + }, "children": [ { "name": "Table-valued Function" }, { "name": "Scalar-valued Function" } @@ -393,17 +780,48 @@ }, { "name": "Data Type", + "languages": { + "zh-cn": "数据类型" + }, "children": [ { "name": "Types", + "languages": { + "zh-cn": "类型" + }, "children": [ - { "name": "System Type" }, - { "name": "User-defined Type (UDT)" } + { + "name": "System Type", + "languages": { + "zh-cn": "系统类型" + } + }, + { + "name": "User-defined Type (UDT)", + "languages": { + "zh-cn": "用户定义类型 (UDT)" + } + } ] }, - { "name": "Conversion" }, - { "name": "Precedence" }, - { "name": "Synonym" }, + { + "name": "Conversion", + "languages": { + "zh-cn": "转换" + } + }, + { + "name": "Precedence", + "languages": { + "zh-cn": "优先级" + } + }, + { + "name": "Synonym", + "languages": { + "zh-cn": "同义词" + } + }, { "name": "Precision/Scale/Length" }, { "name": "XML" }, { "name": "JSON" }, @@ -412,16 +830,35 @@ }, { "name": "Index", + "languages": { + "zh-cn": "索引" + }, "children": [ { "name": "Index Types", + "languages": { + "zh-cn": "索引类型" + }, "children": [ - { "name": "Clustered Index" }, - { "name": "Non-clustered Index" } + { + "name": "Clustered Index", + "languages": { + "zh-cn": "聚集索引" + } + }, + { + "name": "Non-clustered Index", + "languages": { + "zh-cn": "非聚集索引" + } + } ] }, { "name": "Index Setting", + "languages": { + "zh-cn": "索引设置" + }, "children": [ { "name": "Include" }, { "name": "Filter" } @@ -429,6 +866,9 @@ }, { "name": "Index Management", + "languages": { + "zh-cn": "索引管理" + }, "children": [ { "name": "Rebuild" }, { "name": "Reorganise" }, @@ -441,11 +881,22 @@ }, { "name": "Column", + "languages": { + "zh-cn": "列" + }, "children": [ { "name": "columnstore", + "languages": { + "zh-cn": "" + }, "children": [ - { "name": "Suitable for Data warehouse" } + { + "name": "Suitable for Data warehouse", + "languages": { + "zh-cn": "适合数据仓库" + } + } ] }, { "name": "NTFS FileStream" } @@ -454,9 +905,15 @@ { "name": "Schema" }, { "name": "Trigger", + "languages": { + "zh-cn": "触发器" + }, "children": [ { "name": "Table Trigger", + "languages": { + "zh-cn": "表触发器" + }, "children": [ { "name": "BEFORE" }, { "name": "FOR/AFTER" }, @@ -468,13 +925,33 @@ { "name": "Constraint" }, { "name": "Key" }, { "name": "Default" }, - { "name": "Synonym" }, - { "name": "Sequence" }, + { + "name": "Synonym" + }, + { + "name": "Sequence", + "languages": { + "zh-cn": "序列" + } + }, { "name": "Variable", + "languages": { + "zh-cn": "变量" + }, "children": [ - { "name": "Local Variable (@)" }, - { "name": "Global Variable (@@)" } + { + "name": "Local Variable (@)", + "languages": { + "zh-cn": "本地变量 (@)" + } + }, + { + "name": "Global Variable (@@)", + "languages": { + "zh-cn": "全局变量 (@@)" + } + } ] }, { "name": "Common Table Expression (CTE)" }, @@ -487,6 +964,9 @@ { "name": "Endpoint" }, { "name": "Job", + "languages": { + "zh-cn": "作业" + }, "children": [ { "name": "Job Agent" }, { "name": "Job Activity Monitor" }, @@ -526,12 +1006,18 @@ "children": [ { "name": "Basics", + "languages": { + "zh-cn": "基本知识" + }, "children": [ { "name": "Transactional message queue" } ] }, { "name": "Objects", + "languages": { + "zh-cn": "对象" + }, "children": [ { "name": "Message" }, { "name": "Contract" }, @@ -547,6 +1033,9 @@ }, { "name": "Standard", + "languages": { + "zh-cn": "标准" + }, "children": [ { "name": "ANSI 92" @@ -555,9 +1044,15 @@ }, { "name": "Languages", + "languages": { + "zh-cn": "语言" + }, "children": [ { "name": "Query Language", + "languages": { + "zh-cn": "查询语言" + }, "children": [ { "name": "T-SQL (Transact-SQL)" }, { "name": "MDX (MultiDimensional eXpressions)" } @@ -565,6 +1060,9 @@ }, { "name": "Data Manipulation Language (DML)", + "languages": { + "zh-cn": "数据操作语言 (DML)" + }, "children": [ { "name": "CRUD", @@ -590,6 +1088,9 @@ }, { "name": "Data Definition Language (DDL)", + "languages": { + "zh-cn": "数据定义语言 (DDL)" + }, "children": [ { "name": "CREATE" }, { "name": "ALTER" }, @@ -601,6 +1102,9 @@ }, { "name": "Data Control Language (DCL)", + "languages": { + "zh-cn": "数据控制语言 (DCL)" + }, "children": [ { "name": "GRANT" }, { "name": "REVOKE" } @@ -608,6 +1112,9 @@ }, { "name": "Transaction Control Language (TCL)", + "languages": { + "zh-cn": "事务控制语言 (TCL)" + }, "children": [ { "name": "BEGIN TRANSACTION" }, { "name": "COMMIT" }, @@ -619,6 +1126,9 @@ }, { "name": "System Databases", + "languages": { + "zh-cn": "系统数据库" + }, "children": [ { "name": "master (dbs, logins, configs)" }, { "name": "tempdb (temp tables / sps)" }, @@ -629,6 +1139,9 @@ }, { "name": "File", + "languages": { + "zh-cn": "文件" + }, "children": [ { "name": "primary (MDF)" }, { "name": "secondary (NDF)" }, @@ -639,6 +1152,9 @@ }, { "name": "Runtime", + "languages": { + "zh-cn": "运行时" + }, "children": [ { "name": "Process" }, { "name": "Worker" }, @@ -646,6 +1162,7 @@ { "name": "Request" }, { "name": "Stall" }, { "name": "Stats" }, + { "name": "Query Store" }, { "name": "Cache", "children": [ @@ -671,6 +1188,9 @@ }, { "name": "Replication", + "languages": { + "zh-cn": "复制" + }, "children": [ { "name": "Log Shipping" }, { @@ -719,6 +1239,9 @@ }, { "name": "Versions", + "languages": { + "zh-cn": "版本号" + }, "children": [ { "name": "SQL Server 2005", @@ -757,7 +1280,6 @@ { "name": "SQL Server 2012", "children": [ - { "name": "Columnstore Index" }, { "name": "Sequence" }, { "name": "THROW" } ] @@ -765,14 +1287,19 @@ { "name": "SQL Server 2014", "children": [ - { "name": "In-memory Table" } + { "name": "In-memory Table" }, + { "name": "Clustered Columnstore Index" } ] }, { "name": "SQL Server 2016", "children": [ + { "name": "Columnstore Index" }, + { "name": "In-memory OLTP" }, { "name": "JSON" }, - { "name": "Ploybase (connector to BigData)" }, + { "name": "Query Store" }, + { "name": "Temporal Tables" }, + { "name": "Polybase (connector to BigData)" }, { "name": "Always Encrypted" } ] } @@ -780,6 +1307,9 @@ }, { "name": "Editions", + "languages": { + "zh-cn": "产品版本" + }, "children": [ { "name": "Express" }, { "name": "BI" }, @@ -792,8 +1322,12 @@ }, { "name": "Management", + "languages": { + "zh-cn": "管理" + }, "children": [ { "name": "SQL Server Management Studio (SSMS)" }, + { "name": "SQL Operations Studio" }, { "name": "SQL Server Command Line Util (sqlcmd)" }, { "name": "SQL Monitor ;-)", @@ -803,6 +1337,9 @@ }, { "name": "Maintenance", + "languages": { + "zh-cn": "维护" + }, "children": [ { "name": "Maintenance Plan" }, { "name": "Logs" }, @@ -837,6 +1374,9 @@ }, { "name": "Business Intelligence (BI)", + "languages": { + "zh-cn": "商业智能 (BI)" + }, "children": [ { "name": "SQL Server Integration Service (SSIS)", @@ -855,6 +1395,9 @@ }, { "name": "Troubleshoot", + "languages": { + "zh-cn": "调试" + }, "children": [ { "name": "Dedicated Administrator Connection (DAC)", @@ -877,6 +1420,9 @@ }, { "name": "Performance", + "languages": { + "zh-cn": "性能" + }, "children": [ { "name": "Seek" }, { "name": "Scan" }, @@ -887,6 +1433,9 @@ }, { "name": "Services", + "languages": { + "zh-cn": "服务" + }, "children": [ { "name": "SQL Server" }, { "name": "SQL Server Browser" }, @@ -895,6 +1444,9 @@ }, { "name": "Connectivity", + "languages": { + "zh-cn": "连接" + }, "children": [ { "name": "ADO.NET" }, { "name": "ODBC" }, @@ -903,11 +1455,26 @@ }, { "name": "Security", + "languages": { + "zh-cn": "安全" + }, "children": [ { "name": "Access Control" }, { "name": "SQL Inject" }, { "name": "Backup" } ] + }, + { + "name": "Testing", + "languages": { + "zh-cn": "测试" + }, + "children": [ + { + "name": "tSQLt", + "url": "http://tsqlt.org/" + } + ] } ] }, @@ -935,6 +1502,9 @@ }, { "name": "Cloud", + "languages": { + "zh-cn": "云" + }, "children": [ { "name": "Azure", @@ -948,7 +1518,6 @@ { "name": "Blobs" }, { "name": "Tables" }, { "name": "Queues" }, - { "name": "StorSimple" }, { "name": "Files and Disks" } ] }, @@ -964,32 +1533,82 @@ "children": [ { "name": "Concepts", + "languages": { + "zh-cn": "概念" + }, "children": [ - { "name": "XML/JSON based" }, - { "name": "Eventually Consistency" } + { + "name": "XML/JSON based", + "languages": { + "zh-cn": "基于XML/JSON" + } + }, + { + "name": "Eventually Consistency", + "languages": { + "zh-cn": "最终一致性" + } + } ] }, { "name": "Limitation", + "languages": { + "zh-cn": "限制" + }, "children": [ { "name": "CAPS/Brewer's theorem", + "languages": { + "zh-cn": "CAPS/Brewer理论" + }, "url": "https://en.wikipedia.org/wiki/CAP_theorem", "children": [ - { "name": "Consistency" }, - { "name": "Availability" }, - { "name": "Partition tolerance" } + { + "name": "Consistency", + "languages": { + "zh-cn": "一致性" + } + }, + { + "name": "Availability", + "languages": { + "zh-cn": "可用性" + } + }, + { + "name": "Partition tolerance", + "languages": { + "zh-cn": "网络分区容忍性" + } + } ] }, - { "name": "Lack of join" }, - { "name": "Lack of true ACID" } + { + "name": "Lack of join", + "languages": { + "zh-cn": "缺乏关联" + } + }, + { + "name": "Lack of true ACID", + "languages": { + "zh-cn": "缺乏真正的ACID" + } + } ] }, { "name": "Types", + "languages": { + "zh-cn": "类型" + }, "children": [ { "name": "Column", + "languages": { + "zh-cn": "列" + }, "children": [ { "name": "Cassandra", @@ -1003,6 +1622,9 @@ }, { "name": "Key/Value", + "languages": { + "zh-cn": "键值" + }, "children": [ { "name": "CouchDB", @@ -1024,6 +1646,9 @@ }, { "name": "Document", + "languages": { + "zh-cn": "文档" + }, "children": [ { "name": "Apache CouchDB", @@ -1045,6 +1670,9 @@ }, { "name": "Graph", + "languages": { + "zh-cn": "图形关系" + }, "children": [ { "name": "Neo4J", @@ -1054,6 +1682,9 @@ }, { "name": "Object", + "languages": { + "zh-cn": "对象" + }, "children": [ { "name": "ObjectStore", @@ -1066,4 +1697,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/ux/DatabaseStack.zh-cn.json b/ux/DatabaseStack.zh-cn.json deleted file mode 100644 index 13fd7bb..0000000 --- a/ux/DatabaseStack.zh-cn.json +++ /dev/null @@ -1,1069 +0,0 @@ -{ - "name": "数据库", - "children": [ - { - "name": "关系型数据库系统", - "children": [ - { - "name": "简单", - "children": [ - { - "name": "dBase ;-)", - "url": "https://en.wikipedia.org/wiki/DBase" - }, - { "name": "Foxbase ;-)" }, - { - "name": "FoxPro ;-)", - "url": "https://en.wikipedia.org/wiki/FoxPro" - }, - { - "name": "Visual FoxPro ;-)", - "url": "https://msdn.microsoft.com/en-us/vfoxpro/bb190225.aspx" - }, - { - "name": "Access", - "url": "https://products.office.com/en-us/access" - }, - { - "name": "Sqlite", - "url": "https://www.sqlite.org/" - } - ] - }, - { - "name": "基本知识", - "children": [ - { - "name": "Edgar F. Codd", - "url": "https://en.wikipedia.org/wiki/Edgar_F._Codd" - }, - { - "name": "对象关系映射 (O/RM)", - "url": "https://en.wikipedia.org/wiki/Object-relational_mapping" - }, - { - "name": "数据库规范化", - "url": "https://en.wikipedia.org/wiki/Database_normalization", - "children": [ - { - "name": "范式", - "children": [ - { "name": "第一范式 (1NF)" }, - { "name": "第二范式 (2NF)" }, - { "name": "第三范式 (3NF)" } - ] - } - ] - }, - { - "name": "事务", - "url": "https://en.wikipedia.org/wiki/Database_transaction", - "children": [ - { - "name": "ACID", - "url": "https://en.wikipedia.org/wiki/ACID", - "children": [ - { "name": "原子性" }, - { "name": "一致性" }, - { "name": "隔离性/独立性" }, - { "name": "持久性" } - ] - } - ] - } - ] - }, - { - "name": "MS SQL Server", - "url": "http://www.microsoft.com/en-us/server-cloud/products/sql-server/", - "children": [ - { - "name": "SQL OS", - "children": [ - { "name": "Memory Management" }, - { "name": "Buffer Pool" }, - { "name": "Deadlock detection" }, - { "name": "Exception handling" }, - { "name": "Schedulers" }, - { "name": "InterOp" } - ] - }, - { - "name": "存储引擎", - "children": [ - { "name": "Transaction Services" }, - { "name": "File Manager" }, - { "name": "Data File" }, - { "name": "Extents" }, - { "name": "Pages" }, - { - "name": "Log File", - "children": [ - { "name": "Write Ahead Log (WAL)" }, - { - "name": "Recovery", - "children": [ - { "name": "Full" }, - { "name": "Bulk-logged" } - ] - }, - { "name": "Dirty Pages" }, - { "name": "Lazy Writer" }, - { "name": "Checkpoint" }, - { "name": "Log Sequence Number (LSN)" } - ] - } - ] - }, - { - "name": "关系引擎", - "children": [ - { - "name": "Query Processing", - "children": [ - { "name": "Parser" }, - { - "name": "Optimizer", - "children": [ - { "name": "Stat" }, - { "name": "Hinting" }, - { - "name": "Plan", - "children": [ - { "name": "Compilation" }, - { "name": "Caching" }, - { "name": "Recompilation" } - ] - } - ] - }, - { "name": "SQL Manager" }, - { "name": "Database Manager" }, - { "name": "Query Executor" } - ] - }, - { "name": "Memory Management" }, - { "name": "Thread and Task Management" }, - { "name": "Buffer Management" }, - { "name": "Distributed Query Processing" } - ] - }, - { - "name": "通讯", - "children": [ - { "name": "SQL Server Network Interface (SNI)" }, - { "name": "Tabular Data Stream (TDS)" }, - { - "name": "Protocols", - "children": [ - { "name": "TCP/IP" }, - { "name": "Named pipes" }, - { "name": "Shared memory" }, - { "name": "Virtual Interface Adapter (VIA, discontinued from 2012)" }, - { "name": "Web Services" } - ] - } - ] - }, - { - "name": "概念", - "children": [ - { - "name": "实例", - "children": [ - { "name": "默认" }, - { "name": "命名" }, - { "name": "别名" } - ] - }, - { - "name": "端口", - "children": [ - { "name": "默认: 1433" }, - { "name": "动态" } - ] - }, - { - "name": "事务", - "children": [ - { - "name": "ACID", - "children": [ - { "name": "Atomic" }, - { "name": "Consistent" }, - { "name": "Isolated" }, - { "name": "Durable" } - ] - }, - { - "name": "类型", - "children": [ - { - "name": "隐式", - "children": [ - { "name": "单个 UPDATE/DELETE" } - ] - }, - { - "name": "显式", - "children": [ - { "name": "BEGIN/COMMIT/ROLLBACK" } - ] - } - ] - }, - { "name": "Checkpoint" }, - { - "name": "隔离级别 (从低到高)", - "url": "https://technet.microsoft.com/en-us/library/ms189122(v=sql.105).aspx", - "children": [ - { - "name": "Read uncommitted", - "children": [ - { "name": "脏读" }, - { "name": "和NOLOCK一样" } - ] - }, - { - "name": "Read committed (默认)", - "children": [ - { - "name": "READ_COMMITTED_SNAPSHOT", - "children": [ - { - "name": "ON", - "children": [ - { "name": "repeatable read" } - ] - }, - { - "name": "OFF (default)", - "children": [ - { "name": "Nonrepeatable read, phantom" } - ] - } - ] - } - ] - }, - { "name": "Repeatable read" }, - { - "name": "Snapshot", - "children": [ - { "name": "Database ALLOW_SNAPSHOT_ISOLATION ON" }, - { "name": "2005+" } - ] - }, - { "name": "Serializable" } - ] - } - ] - }, - { - "name": "并发性", - "children": [ - { - "name": "Lock", - "children": [ - { "name": "乐观锁" }, - { "name": "悲观锁" }, - { "name": "Exclusive" }, - { "name": "Shared" } - ] - }, - { "name": "Wait" }, - { "name": "Latch" }, - { - "name": "死锁", - "children": [ - { "name": "Kill" } - ] - }, - { "name": "sync/async" }, - { "name": "Blocking" }, - { "name": "行版本" } - ] - } - ] - }, - { - "name": "对象", - "children": [ - { - "name": "数据库", - "children": [ - { - "name": "恢复模式", - "children": [ - { - "name": "作用", - "children": [ - { "name": "备份事务日志" }, - { "name": "影响备份类型" }, - { "name": "影响复制类型" } - ] - }, - { - "name": "模式", - "children": [ - { - "name": "简单", - "children": [ - { "name": "Not point-in-time recovery" }, - { "name": "Minimum space" } - ] - }, - { - "name": "完整 (默认)", - "children": [ - { "name": "Point-in-time recovery" }, - { "name": "Large space" } - ] - }, - { - "name": "大容量日志恢复", - "children": [ - { "name": "Point-in-time recovery" }, - { "name": "No bulk operation logged" }, - { "name": "Save space" } - ] - } - ] - } - ] - }, - { - "name": "兼容级别", - "children": [ - { - "name": "版本", - "children": [ - { "name": "实际上就是SQL Server的版本" }, - { "name": "@@VERSION" } - ] - }, - { "name": "130: SQL  Server 2016" }, - { "name": "120: SQL  Server 2014" }, - { "name": "110: SQL  Server 2012" }, - { "name": "100: SQL  Server 2008" }, - { "name": "90: SQL  Server 2005" }, - { "name": "80: SQL Server 2000" } - ] - }, - { "name": "加密" }, - { "name": "复制" } - ] - }, - { - "name": "表", - "children": [ - { - "name": "标准", - "children": [ - { "name": "分区" }, - { "name": "压缩" } - ] - }, - { "name": "表变量" }, - { - "name": "临时表", - "children": [ - { "name": "本地" }, - { "name": "全局" } - ] - }, - { "name": "FileTable" } - ] - }, - { - "name": "视图", - "children": [ - { "name": "标准" }, - { "name": "索引" }, - { "name": "分区" } - ] - }, - { "name": "存储过程 (SP)" }, - { - "name": "函数 (FN)", - "children": [ - { "name": "Table-valued Function" }, - { "name": "Scalar-valued Function" } - ] - }, - { - "name": "数据类型", - "children": [ - { - "name": "类型", - "children": [ - { "name": "系统类型" }, - { "name": "用户定义类型 (UDT)" } - ] - }, - { "name": "转换" }, - { "name": "优先级" }, - { "name": "同义词" }, - { "name": "Precision/Scale/Length" }, - { "name": "XML" }, - { "name": "JSON" }, - { "name": "Spatial (CLR)" } - ] - }, - { - "name": "索引", - "children": [ - { - "name": "索引类型", - "children": [ - { "name": "聚集索引" }, - { "name": "非聚集索引" } - ] - }, - { - "name": "索引设置", - "children": [ - { "name": "Include" }, - { "name": "Filter" } - ] - }, - { - "name": "索引管理", - "children": [ - { "name": "Rebuild" }, - { "name": "Reorganise" }, - { "name": "Disable" }, - { "name": "Enable" }, - { "name": "Drop" } - ] - } - ] - }, - { - "name": "列", - "children": [ - { - "name": "columnstore", - "children": [ - { "name": "Suitable for Data warehouse" } - ] - }, - { "name": "NTFS FileStream" } - ] - }, - { "name": "Schema" }, - { - "name": "触发器", - "children": [ - { - "name": "表触发器", - "children": [ - { "name": "BEFORE" }, - { "name": "FOR/AFTER" }, - { "name": "INSTEAD OF" } - ] - } - ] - }, - { "name": "Constraint" }, - { "name": "Key" }, - { "name": "Default" }, - { "name": "Synonym" }, - { "name": "Sequence" }, - { - "name": "变量", - "children": [ - { "name": "本地变量 (@)" }, - { "name": "全局变量 (@@)" } - ] - }, - { "name": "Common Table Expression (CTE)" }, - { "name": "Cursor" }, - { "name": "Collation" }, - { "name": "Login" }, - { "name": "User" }, - { "name": "Rule" }, - { "name": "Server role" }, - { "name": "Endpoint" }, - { - "name": "作业", - "children": [ - { "name": "Job Agent" }, - { "name": "Job Activity Monitor" }, - { "name": "Alert" }, - { "name": "Operator" }, - { - "name": "SQL Job", - "children": [ - { "name": "Step" }, - { "name": "Schedule" }, - { "name": "Notification" } - ] - } - ] - }, - { - "name": "SQL CLR (.NET CLR)", - "children": [ - { "name": "Assembly" }, - { - "name": "Managed Code Types", - "children": [ - { "name": "Function" }, - { "name": "Stored Procedure" }, - { "name": "Trigger" }, - { "name": "UDF" }, - { "name": "UDA" }, - { "name": "UDT" } - ] - }, - { "name": "Security Levels" } - ] - }, - { "name": "Linked Server" }, - { - "name": "Service Broker", - "children": [ - { - "name": "Basics", - "children": [ - { "name": "Transactional message queue" } - ] - }, - { - "name": "Objects", - "children": [ - { "name": "Message" }, - { "name": "Contract" }, - { "name": "Queue" }, - { "name": "Service" }, - { "name": "Dialog" }, - { "name": "Conversation" } - ] - } - ] - } - ] - }, - { - "name": "标准", - "children": [ - { - "name": "ANSI 92" - } - ] - }, - { - "name": "语言", - "children": [ - { - "name": "查询语言", - "children": [ - { "name": "T-SQL (Transact-SQL)" }, - { "name": "MDX (MultiDimensional eXpressions)" } - ] - }, - { - "name": "数据操作语言 (DML)", - "children": [ - { - "name": "CRUD", - "children": [ - { "name": "Create (INSERT)" }, - { "name": "Retrieve (SELECT)" }, - { "name": "Update (UPDATE)" }, - { "name": "Delete (DELETE)" } - ] - }, - { "name": "MERGE" }, - { - "name": "TEXT", - "children": [ - { "name": "UPDATETEXT" }, - { "name": "WRITETEXT" }, - { "name": "READTEXT" } - ] - }, - { "name": "BULK INSERT" }, - { "name": "EXECUTE" } - ] - }, - { - "name": "数据定义语言 (DDL)", - "children": [ - { "name": "CREATE" }, - { "name": "ALTER" }, - { "name": "DROP" }, - { "name": "TRUNCATE" }, - { "name": "RESTORE" }, - { "name": "RECONFIGURE" } - ] - }, - { - "name": "数据控制语言 (DCL)", - "children": [ - { "name": "GRANT" }, - { "name": "REVOKE" } - ] - }, - { - "name": "事务控制语言 (TCL)", - "children": [ - { "name": "BEGIN TRANSACTION" }, - { "name": "COMMIT" }, - { "name": "ROLLBACK" }, - { "name": "SAVE TRANSACTION" } - ] - } - ] - }, - { - "name": "系统数据库", - "children": [ - { "name": "master (dbs, logins, configs)" }, - { "name": "tempdb (temp tables / sps)" }, - { "name": "msdb (jobs/alerts/backups)" }, - { "name": "model (template for new db)" }, - { "name": "resource (invisible, system objects)" } - ] - }, - { - "name": "文件", - "children": [ - { "name": "primary (MDF)" }, - { "name": "secondary (NDF)" }, - { "name": "log (LDF)" }, - { "name": "File/Filegroup" }, - { "name": "Auto Grow" } - ] - }, - { - "name": "运行时", - "children": [ - { "name": "Process" }, - { "name": "Worker" }, - { "name": "Connection" }, - { "name": "Request" }, - { "name": "Stall" }, - { "name": "Stats" }, - { - "name": "Cache", - "children": [ - { "name": "aging" } - ] - }, - { "name": "Catalog Views" }, - { - "name": "Dynamic Management Views (DMV)", - "children": [ - { "name": "Execution count" }, - { "name": "Execution io/cpu/perf" } - ] - }, - { - "name": "Full Text Search (FTS)", - "children": [ - { "name": "Integrated Full Text Search (iFTS)" } - ] - }, - { "name": "Trace flags" } - ] - }, - { - "name": "复制", - "children": [ - { "name": "Log Shipping" }, - { - "name": "Publish/Subscribe", - "children": [ - { "name": "Transactional" }, - { "name": "Merge" }, - { "name": "Snapshot" } - ] - }, - { - "name": "Mirroring (deprecated from 2012)", - "children": [ - { - "name": "Core", - "children": [ - { "name": "Principal" }, - { "name": "Witness" } - ] - }, - { "name": "Database Mirroring Monitor" } - ] - }, - { "name": "AlwaysOn" }, - { - "name": "Clustering", - "children": [ - { - "name": "Core", - "children": [ - { "name": "Shared Disk Array" }, - { "name": "Quorum" } - ] - }, - { - "name": "Failover", - "children": [ - { "name": "Active/Active" }, - { "name": "Active/Passive" } - ] - } - ] - }, - { "name": "Snapshot" } - ] - }, - { - "name": "版本号", - "children": [ - { - "name": "SQL Server 2005", - "children": [ - { "name": "SSIS" }, - { "name": "SSRS" }, - { "name": "SSAS" }, - { "name": "Common Language Runtime (CLR)" }, - { "name": "XML" }, - { "name": "Data Service (SOAP)" }, - { "name": "Service Broker" }, - { "name": "Common Table Expression (CTE)" }, - { "name": "Dynamic Management View (DMV)" }, - { "name": "Database Mirroring (SP1)" }, - { "name": "TRY/CATCH" } - ] - }, - { - "name": "SQL Server 2008", - "children": [ - { "name": "Always On" }, - { "name": "FILESTREAM" }, - { "name": "Integrated Full-Text Search (iFTS)" }, - { - "name": "Spatial Types", - "children": [ - { "name": "GEOMETRY" }, - { "name": "GEOGRAPHY" } - ] - }, - { "name": "Transparent Data Encryption (TDE)" }, - { "name": "IntelliSense" }, - { "name": "SSRS Charting (acquired Dundas charts)" } - ] - }, - { - "name": "SQL Server 2012", - "children": [ - { "name": "Columnstore Index" }, - { "name": "Sequence" }, - { "name": "THROW" } - ] - }, - { - "name": "SQL Server 2014", - "children": [ - { "name": "In-memory Table" } - ] - }, - { - "name": "SQL Server 2016", - "children": [ - { "name": "JSON" }, - { "name": "Ploybase (connector to BigData)" }, - { "name": "Always Encrypted" } - ] - } - ] - }, - { - "name": "产品版本", - "children": [ - { "name": "Express" }, - { "name": "BI" }, - { "name": "Web" }, - { "name": "Standard" }, - { "name": "Enterprise" }, - { "name": "Datacenter" }, - { "name": "Local DB" } - ] - }, - { - "name": "管理", - "children": [ - { "name": "SQL Server Management Studio (SSMS)" }, - { "name": "SQL Server Command Line Util (sqlcmd)" }, - { - "name": "SQL Monitor ;-)", - "url": "https://github.com/unruledboy/SQLMonitor" - } - ] - }, - { - "name": "维护", - "children": [ - { "name": "Maintenance Plan" }, - { "name": "Logs" }, - { "name": "Database Mail" }, - { - "name": "Database", - "children": [ - { - "name": "Backup/Restore", - "children": [ - { - "name": "Mode", - "children": [ - { "name": "Full" }, - { "name": "Differential" }, - { "name": "Transaction log" } - ] - } - ] - }, - { "name": "Online/Offline" }, - { "name": "Attach/Dettach" }, - { "name": "Shrink" } - ] - }, - { "name": "Import/Export" }, - { "name": "DBCC" }, - { "name": "Bulk Copy (bcp command line)" }, - { "name": "Resource governor" }, - { "name": "Facets" } - ] - }, - { - "name": "商业智能 (BI)", - "children": [ - { - "name": "SQL Server Integration Service (SSIS)", - "children": [ - { "name": "Extract-Transform-Load (ETL)" } - ] - }, - { "name": "SQL Server Reporting Service (SSRS)" }, - { - "name": "SQL Server Analysis Service (SSAS)", - "children": [ - { "name": "OLAP" } - ] - } - ] - }, - { - "name": "调试", - "children": [ - { - "name": "Dedicated Administrator Connection (DAC)", - "children": [ - { "name": "ADMIN:INSTANCE" }, - { "name": "SQL Browser service must be running" } - ] - }, - { "name": "SQL Server Profiler" }, - { "name": "Activity Monitor" }, - { - "name": "Error", - "children": [ - { "name": "Severity Levels" }, - { "name": "Error Log" }, - { "name": "sys.xp_readerrorlog" } - ] - } - ] - }, - { - "name": "性能", - "children": [ - { "name": "Seek" }, - { "name": "Scan" }, - { "name": "Fragmentation" }, - { "name": "Partitioning" }, - { "name": "Database Engine Tuning Advisor" } - ] - }, - { - "name": "服务", - "children": [ - { "name": "SQL Server" }, - { "name": "SQL Server Browser" }, - { "name": "SQL Server Agent" } - ] - }, - { - "name": "连接", - "children": [ - { "name": "ADO.NET" }, - { "name": "ODBC" }, - { "name": "JDBC" } - ] - }, - { - "name": "安全", - "children": [ - { "name": "Access Control" }, - { "name": "SQL Inject" }, - { "name": "Backup" } - ] - } - ] - }, - { - "name": "Oracle", - "url": "https://www.oracle.com/database/" - }, - { - "name": "MySQL", - "url": "https://www.mysql.com/" - }, - { - "name": "PostgreSQL", - "url": "http://www.postgresql.org/" - }, - { - "name": "Informix", - "url": "http://www.ibm.com/software/data/informix" - }, - { - "name": "DB2", - "url": "http://www.ibm.com/software/data/db2" - } - ] - }, - { - "name": "云", - "children": [ - { - "name": "Azure", - "url": "https://azure.microsoft.com", - "children": [ - { "name": "Database" }, - { "name": "Redis Cache" }, - { - "name": "Storage", - "children": [ - { "name": "Blobs" }, - { "name": "Tables" }, - { "name": "Queues" }, - { "name": "StorSimple" }, - { "name": "Files and Disks" } - ] - }, - { "name": "StorSimple" }, - { "name": "SQL Data Warehouse" } - ] - } - ] - }, - { - "name": "NoSQL", - "url": "https://en.wikipedia.org/wiki/NoSQL", - "children": [ - { - "name": "概念", - "children": [ - { "name": "基于XML/JSON" }, - { "name": "最终一致性" } - ] - }, - { - "name": "限制", - "children": [ - { - "name": "CAPS/Brewer理论", - "url": "https://en.wikipedia.org/wiki/CAP_theorem", - "children": [ - { "name": "一致性" }, - { "name": "可用性" }, - { "name": "网络分区容忍性" } - ] - }, - { "name": "缺乏关联" }, - { "name": "缺乏真正的ACID" } - ] - }, - { - "name": "类型", - "children": [ - { - "name": "列", - "children": [ - { - "name": "Cassandra", - "url": "http://cassandra.apache.org/" - }, - { - "name": "HBase", - "url": "http://hbase.apache.org/" - } - ] - }, - { - "name": "键值", - "children": [ - { - "name": "CouchDB", - "url": "http://couchdb.apache.org/" - }, - { - "name": "AWS Dynamo", - "url": "https://aws.amazon.com/dynamodb/" - }, - { - "name": "MemcacheDB", - "url": "http://memcachedb.org/" - }, - { - "name": "Redis", - "url": "http://redis.io/" - } - ] - }, - { - "name": "文档", - "children": [ - { - "name": "Apache CouchDB", - "url": "http://couchdb.apache.org/" - }, - { - "name": "Couchbase", - "url": "http://www.couchbase.com/" - }, - { - "name": "Azure DocumentDB", - "url": "http://azure.microsoft.com/en-us/services/documentdb/" - }, - { - "name": "MongoDB", - "url": "https://www.mongodb.org/" - } - ] - }, - { - "name": "图形关系", - "children": [ - { - "name": "Neo4J", - "url": "http://neo4j.com/" - } - ] - }, - { - "name": "对象", - "children": [ - { - "name": "ObjectStore", - "url": "http://www.objectstore.com/" - } - ] - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/ux/dndTree.js b/ux/dndTree.js index 8350b89..ce1b941 100644 --- a/ux/dndTree.js +++ b/ux/dndTree.js @@ -1,36 +1,15 @@ -var QueryString = function () { - // This function is anonymous, is executed immediately and - // the return value is assigned to QueryString! - var query_string = {}; - var query = window.location.search.substring(1); - var vars = query.split("&"); - for (var i=0;i 0 ? d.children : null; }, 0); @@ -91,7 +70,7 @@ function sortTree() { tree.sort(function(a, b) { - return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1; + return parseName(b).toLowerCase() < parseName(a).toLowerCase() ? 1 : -1; }); } // Sort the tree initially incase the JSON isn't in a sorted order. @@ -456,7 +435,7 @@ return d.children || d._children ? "end" : "start"; }) .text(function(d) { - return d.name; + return parseName(d); }) .style("fill-opacity", 0); @@ -483,7 +462,7 @@ return d.children || d._children ? "end" : "start"; }) .text(function(d) { - return d.name; + return parseName(d); }); // Change the circle fill depending on whether it has children and is collapsed