### GC 優化 #### 1.防止大對象Buffer到記憶體中 **現象**:當大包請求時,YGC 耗時嚴重 **原因**:預設情況下 Zuul2 並不會緩存請求體(DirectByteBuffer),也就意味著它會先發送接收到的請求 Headers 到後端服務,之後接收到請求體再繼續發送到後端服 ...
在上一篇中構思了把查詢子句描述出來的數據結構,那麼能否用代碼將其表達出來,如何表達呢?
Id>1 and Id<10
如上所示,有兩個獨立的條件分別為Id>1
和 Id<10
,用一個邏輯操作符 and
連接起來。
再看下麵這條,後面也是兩個獨立條件通過操作符or
連接,並包在括弧里,作為一個整體。
Id>1 and Id<10 and (Name="MyName" or Name="HisName")
可以看到當中包含幾種元素:欄位名稱,邏輯操作符,比較操作符,條件值,數據類型,括弧。兩個概念:獨立的條件和由括弧包將它們起來的整體。
那麼可以設計兩個類來代表獨立條件和條件組,如下所示:
//獨立條件偽代碼:
public class Field
{
public enum Logical {get;set;} //與其它條件之間的邏輯關係
public enum comparer {get;set;} //條件比較符
public Type DataType {get;set;} //數據類型
public string FieldName {get;set;} //欄位名稱
public object QueryValue {get;set;} //條件值
}
由於複雜的查詢的括弧是可嵌套的,多重組合的,類似下麵的還算簡單的子句:
(dept="mgr" or dept ="bi" ) and(Id>1 and Id<10 and (Name="MyName" or Name="HisName"))
那麼條件組裡就需要包含獨立條件和條件組,並且可嵌套,即組中有組:
//條件組偽代碼:
public class Block
{
public enum Logical {get;set;} //與其它條件組或獨立條件之間的邏輯關係
public List<Field> Fields {get;}
public List<Block> Blocks {get;}
}
光文字看得似乎容易蒙逼,來張圖或者能輔助理解(圖示僅用來說明分組的層次):
-
至此,把查詢條件用代碼描述出來的構思就暫告一段落了。
-