如何使用FireDAC在Firebird 3.0上启用WireCompression
问题描述:
我正在寻找使用WireCompression连接到Firebird Server 3.0。这是自3.0版以来的新功能,我很难做到这一点,唯一可以找到的说明文件是在firebird.conf中将WireCompression设置为TRUE,并使用connect参数“wirecompression = true”。如何使用FireDAC在Firebird 3.0上启用WireCompression
这是我已经有了这远:
firebird.conf:
# Firebird configuration file for Firebird 3.0 64-bit SuperServer
# Optimized by IBSurgeon (www.ib-aid.com) for HQbird distribution.
#
ServerMode = Super
#DatabaseAccess = Full
#RemoteAccess = true
#ExternalFileAccess = None
#UdfAccess = Restrict UDF
#TempDirectories =
#AuditTraceConfigFile =
#MaxUserTraceLogSize = 10
DefaultDbCachePages = 50000
#DatabaseGrowthIncrement = 128M
#FileSystemCacheThreshold = 64K
#FileSystemCacheSize = 0
#RemoteFileOpenAbility = 0
TempBlockSize = 2M
TempCacheLimit = 364M
AuthServer = Srp
AuthClient = Srp, Win_Sspi, Legacy_Auth
UserManager = Srp
#WireCryptPlugin = Arc4
#hqbird traceapi plugin should be in plugins folder!
TracePlugin = fbtrace2db
#CryptPlugin = Arc4
#KeyHolderPlugin =
#Providers = Remote,Engine12,Loopback
#DeadlockTimeout = 10
#MaxUnflushedWrites = 100
#MaxUnflushedWriteTime = 5
#BugcheckAbort = 0
#RelaxedAliasChecking = 0
#ConnectionTimeout = 180
#(for client)/Required (for server)
WireCompression = true
WireCrypt = enabled
#DummyPacketInterval = 0
#RemoteServiceName = gds_db
RemoteServicePort = 3050
#RemoteAuxPort = 0
#TcpRemoteBufferSize = 8192
#TcpNoNagle = 1
#RemoteBindAddress =
LockMemSize = 9M
#LockAcquireSpins = 0
LockHashSlots = 30011
#EventMemSize = 64K
#CpuAffinityMask = 0
#GCPolicy = combined
#SecurityDatabase = $(dir_secDb)/security3.fdb
GuardianOption = 1
#ProcessPriorityLevel = 0
#IpcName = FIREBIRD
#RemotePipeName = interbas
代码连接:
//Info: FDB = TFDConnection
with FDB.Params do
begin
Clear;
Add('DriverID=FB');
Add('Database=' + vDatabase);
Add('User_Name=' + AUsername);
Add('PassWord=' + APassword);
Add('WireCompression=true');
end;
FDB.FetchOptions.Unidirectional:= true;
FDB.FetchOptions.RowsetSize:= 1000;
FDB.ResourceOptions.SilentMode:= true;
FDB.Connected := true;
vConnectionInfo:= TStringList.Create;
FDB.GetInfoReport(vConnectionInfo);
ShowMessage(vConnectionInfo.Text);
Clipboard.AsText:= vConnectionInfo.Text;
FreeAndNil(vConnectionInfo);
Result := FDB.Connected;
建立连接,但vConnectionInfo说:
================================
Connection definition parameters
================================
DriverID=FB
Database=server:D:\Databases\FB3.0\test\test.FDB
User_Name=sysdba
PassWord=*****
WireCompression=true
================================
FireDAC info
================================
Tool = RAD Studio 10.1 Berlin
FireDAC = 15.0.1 (Build 86746)
Platform = Windows 32 bit
Defines = FireDAC_NOLOCALE_META;FireDAC_MONITOR
================================
Client info
================================
Loading driver FB ...
Brand = Firebird
Client version = 300009900
Client DLL name = D:\D10\Projects\TestFB30 Client\Win32\Debug\fbclient.dll
================================
Session info
================================
Current catalog =
Current schema =
Server version = WI-V3.0.0.32483 Firebird 3.0
WI-V3.0.0.32483 Firebird 3.0/tcp (server)/P13:C
WI-V3.0.0.32483 Firebird 3.0/tcp (laptop)/P13:C
最后两行说我有协议v13(P13)和数据被加密(:C),但它应该是P13:CZ指示zlib压缩。
我在客户端的debug文件夹中有zlib1.dll,并且Firebird服务器文件夹中的服务器上存在zlib1.dll。
我可以连接到数据库,我得到没有错误消息。
我想尽办法压缩,但我相信你们会帮助我!
答
为了使用FireDAC所有你需要做的是让zlib压缩:
- 使用firebird.conf通过设置wirecompression =真
- 有fbclient的正确/同一版本启用wirecompression服务器端。 DLL客户端
- 将文件夹中包含客户端EXE
- 创建firebird.conf并添加行wirecompression = TRUE,并将其保存到同一文件夹你的EXE正确zlib1.dll(在我的案件86)是。
- 到连接添加wirecompression =真PARAMS
Wirecompression现已启用。
有趣的q,+1,你是否依赖会话信息条目告诉你压缩没有被应用,或者你是否使用数据包嗅探器来确认它? – MartynA
我目前依靠会话信息。我尝试解释wireshark数据包,但这不是真的可以解释我...我没有看到从选择查询返回的可读数据,但因为它被加密,我想这是预期的。 –
尽管传统gds32.dll与IBX(5mbps)和fbclient.dll与FireDAC(50mbps)相比,传输速度显着增加,但我希望对高延迟(互联网)连接使用压缩。我现在可以在6秒内检索到120,000条记录,这是相当令人印象深刻的,但是对于压缩,我想这将会更多。 –