如何使用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。

可以连接到数据库,我得到没有错误消息。

我想尽办法压缩,但我相信你们会帮助我!

+0

有趣的q,+1,你是否依赖会话信息条目告诉你压缩没有被应用,或者你是否使用数据包嗅探器来确认它? – MartynA

+0

我目前依靠会话信息。我尝试解释wireshark数据包,但这不是真的可以解释我...我没有看到从选择查询返回的可读数据,但因为它被加密,我想这是预期的。 –

+0

尽管传统gds32.dll与IBX(5mbps)和fbclient.dll与FireDAC(50mbps)相比,传输速度显着增加,但我希望对高延迟(互联网)连接使用压缩。我现在可以在6秒内检索到120,000条记录,这是相当令人印象深刻的,但是对于压缩,我想这将会更多。 –

为了使用FireDAC所有你需要做的是让zlib压缩:

  1. 使用firebird.conf通过设置wirecompression =真
  2. 有fbclient的正确/同一版本启用wirecompression服务器端。 DLL客户端
  3. 将文件夹中包含客户端EXE
  4. 创建firebird.conf并添加行wirecompression = TRUE,并将其保存到同一文件夹你的EXE正确zlib1.dll(在我的案件86)是。
  5. 到连接添加wirecompression =真PARAMS

Wirecompression现已启用。