关于sql-server:实时数据引擎系列五-关于-SQL-Server-与-SQL-Server-CDC

摘要:在企业客户里, SQL Server 在传统的制造业仍然散发着长久的生命力,SQL Server 的 CDC 复杂度相比 Oracle 较低, 因而规范的官网派做法就是间接应用这个 CDC 接口进行同步,但江湖上也有通过裸解析 ldf 文件来间接读取数据库变更,本文将就这两大门派开展探讨。前言上次发的对于Oracle CDC 的文章反应不错, 而像这种类型的数据库还有好几个, 这里把三大闭源数据库先讲一遍: Oracle, SQL Server 和 DB2。 在企业客户里, SQL Server 的应用范畴远远超过我之前的预期, 这个在互联网用户那边简直见不到的数据库, 在传统的制造业, 企业客户里仍然散发着长久的生命力, 在 DB Engine 的排名里, SQL Server 仅次于 Oracle 与 Mysql, 排在第三, 是TAPDATA 在客户场景落地的时候常常碰见的数据库之一。 两大门派SQL Server 的 CDC 复杂度相比 Oracle 较低, 且官网从 08 版本就人造反对这个性能, 只是在 16 版本之前, 这个设置只有在企业版才有, 在 16 版本之后, 在社区版也能够开启性能, 因而规范的官网派做法就是间接应用这个 CDC 接口进行同步。 在开启 CDC 性能之后, SQL Server 会将变更的内容同步到一张表中, 有主键, 业务方通过轮询这张带主键的表拿到新的事务变更。 ...

September 15, 2021 · 1 min · jiezi

3分钟干货之SqlServer的优缺点

优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等; 为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML)的核心支持以及在Internet上和防火墙外进行查询的能力; 缺点:开放性 :SQL Server 只能windows上运行没有丝毫开放性操作系统系统稳定对数据库十分重要Windows9X系列产品偏重于桌面应用NT server只适合小型企业而且windows平台靠性安全性和伸缩性非常有限象unix样久经考验尤其处理大数据库。 伸缩性并行性 :SQL server 并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限。 安全性:没有获得任何安全证书。 性能 :SQL Server 多用户时性能佳 。 客户端支持及应用模式: 客户端支持及应用模式。只支持C/S模式,SQL Server C/S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接。 使用风险:SQL server 完全重写代码经历了长期测试断延迟许多功能需要时间来证明并十分兼容。

April 29, 2019 · 1 min · jiezi

函数计算 Python 连接 SQL Server 小结

python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装 pymssql 。由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需要先安装 FreeTDS。由于早期版本的 pymssql 只提供了 windows 下的 wheel 打包,其他平台(如 linux)需要从源码包编译安装,那需要先安装 freetds-dev 包,以提供必要的头文件。函数计算的 runtime 运行时的目录是只读的,所以对于需要使用 apt-get 和 pip 安装依赖的场景,需要将依赖安装在代码目录而不是系统目录。具体安装方法可以参考《函数计算安装依赖库方法小结》。而 pymssql 的老版本涉及到编译安装,比常见的二级制安装到本地目录略复杂一些。函数计算依赖安装需要有个模拟的 linux 环境,从前我们推荐使用 fcli shell 的 sbox ,启动一个接近生产环境的 docker container 进行依赖安装。因为有些依赖是平台相关的,在 mac 系统安装的动态链接库无法在函数计算的 linux 环境下运行, pymssql 恰好属于这种情况。本文我将使用 fc-docker 进行安装和本地测试。下面的例子是基于函数计算 runtime python3.6 的,对于 python2.7 也进行了测试,同样适用。准备测试环境首先使用 docker 在本机 Mac 电脑下运行一个 SQL Server 2017 服务,并初始化表结构,编辑一个 index.py 的测试文件,以验证数据库访问是否成功。$ docker pull mcr.microsoft.com/mssql/server:2017-latest$ docker run -e ‘ACCEPT_EULA=Y’ -e ‘SA_PASSWORD=Codelife.me’ \ -p 1433:1433 –name sql1 \ -d mcr.microsoft.com/mssql/server:2017-latest将 SQL Server 启动于 1433 端口,并设定 SA 账户密码为 Codelife.me$ brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release$ brew update$ ACCEPT_EULA=y brew install –no-sandbox msodbcsql mssql-tools使用 homebrew 安装 mssql 客户端 sqlcmd。$ sqlcmd -S localhost -U SA -P ‘Codelife.me'1>CREATE DATABASE TestDB2>SELECT Name from sys.Databases3>GOName———————————————–mastertempdbmodelmsdbTestDB(5 rows affected)创建测试数据库 TestDB。1> USE TestDB2> CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)3> INSERT INTO Inventory VALUES (1, ‘banana’, 150); INSERT INTO Inventory VALUES (2, ‘orange’, 154);4> GOChanged database context to ‘TestDB’.(1 rows affected)(1 rows affected)创建一张 Inventory 表,并参入一行测试数据。1> SELECT * FROM Inventory WHERE quantity > 152;2> GOid name quantity———– ————————————————– ———– 2 orange 154(1 rows affected)1> QUIT验证一下插入结果并退出。准备一个测试函数import pymssqldef handler(event, context): conn = pymssql.connect( host=r’docker.for.mac.host.internal’, user=r’SA’, password=r’Codelife.me’, database=‘TestDB’ ) cursor = conn.cursor() cursor.execute(‘SELECT * FROM inventory WHERE quantity > 152’) result = ’’ for row in cursor: result += ‘row = %r\n’ % (row,) conn.close() return result编写一个测试函数 index.py。该函数连接 mac 宿主机docker.for.mac.host.internal (这里不能是 localhost,因为 fc-docker 会将函数运行在 container 内部)的 SQL Server 服务。执行一个查询,并把结果返回出来。最新版的 pymssql创建一个空目录,存放上 index.py 文件。将命令会话的当前路径切换到 index.py 所在的目录,然后执行$ docker run –rm –name mssql-builder -t -d -v $(pwd):/code –entrypoint /bin/sh aliyunfc/runtime-python3.6$ docker exec -t mssql-builder pip install -t /code pymssql$ docker stop mssql-builder这里使用了 fc-docker 提供的 python3.6 的模拟环境:aliyunfc/runtime-python3.6第一行启动了一个不会退出的 docker container,第二行使用 docker exec 进入这个 container 安装依赖,最后一行退出该 container。因为本地路径 $(pwd) 被挂载到 container 内部的 /code 目录,所以 container 退出以后 /code 目录的内容还会保留在本地当前路径下。pip 通过 -t 参数将 wheel 包安装在 /code 目录下。$ docker run –rm -v $(pwd):/code aliyunfc/runtime-python3.6 –handler index.handlerrow = (2, ‘orange’, 154)RequestId: d66496e9-4056-492b-98d9-5bf51e448174 Billed Duration: 144 ms Memory Size: 19执行上面命令可以顺利返回结果。对于不需要使用老本 pymssql 的用户看到这里就可以结束了。早期版本的 pymssql对于早于 2.1.3 版本的 pymssql, pip install 会触发源码编译安装,对于这种情况,需要安装编译时依赖的 freetds-dev,以及运行时依赖的 libsybdb5。编译时依赖可以直接安装在系统目录里,运行时依赖必须安装在本地目录下。docker run –rm –name mssql-builder -t -d -v $(pwd):/code –entrypoint /bin/sh aliyunfc/runtime-python3.6docker exec -t mssql-builder apt-get install -y -d -o=dir::cache=/code libsybdb5docker exec -t mssql-builder bash -c ‘for f in $(ls /code/archives/*.deb); do dpkg -x $f $(pwd) ; done;‘docker exec -t mssql-builder bash -c “rm -rf /code/archives/; mkdir /code/lib;cd /code/lib; ln -sf ../usr/lib/x86_64-linux-gnu/libsybdb.so.5 .“docker exec -t mssql-builder apt-get install -y freetds-dev docker exec -t mssql-builder pip install cython docker exec -t mssql-builder pip install -t /code pymssql==2.1.3docker stop mssql-builder第一行启动一个 container,第十行停止并自动删除该 container。第二行至第三行将运行时依赖 libsybdb5 安装于本地目录。将动态链接库 libsybdb.so.5 链接到目录 /code/lib 目录下,因为该目录默认配置到了环境变量 LD_LIBRARY_PATH 下。将 freetds-dev 和 cython 安装到系统目录,用于 pymssql 编译安装,因为运行时 pymssql 不需要这两个库,所以无需安装在本地目录安装 2.1.3 版本的 pymssql,从 2.1.4 版本开始已经不需要源码安装了。$ docker run –rm -v $(pwd):/code aliyunfc/runtime-python3.6 –handler index.handlerrow = (2, ‘orange’, 154)RequestId: d66496e9-4056-492b-98d9-5bf51e448174 Billed Duration: 144 ms Memory Size: 19测试通过。小结这是一份来迟的函数计算使用 sql server 数据库的配置文档。当前版本的 pymssql 已经不再需要源码安装了。但是 pip 源码包安装的方法,对于其他类似的场景也是适用的。本文也提供了一种基于 fc-docker 的配置和调试方法,不同 fcli 的 sbox,fc-docker 可以写成脚本反复执行,并且也可以用于本地模拟执行,对于 CI 场景非常有帮助。参考阅读http://www.pymssql.org/en/latest/intro.html#installhttp://www.freetds.org/http://www.pymssql.org/en/stable/pymssql_examples.htmlhttps://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017https://cloudblogs.microsoft.com/sqlserver/2017/05/16/sql-server-command-line-tools-for-macos-released/本文作者:倚贤阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

November 22, 2018 · 3 min · jiezi