Мы все знаем, какой XML правильный? На всякий случай, нет проблем, вот в чем дело.
|
1
2
3
|
<root><node>5</node></root> |
Теперь, что действительно нужно компьютеру, так это номер пять и некоторый контекст вокруг него. В XML вы (человек и компьютер) можете видеть, как он представляет контекст для пяти. Теперь допустим, что вместо этого у вас есть бизнес-документ XML, такой как FPML
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<FpML xmlns="http://www.fpml.org/2007/FpML-4-4" xmlns:fpml="http://www.fpml.org/2007/FpML-4-4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4-4" xsi:schemaLocation="http://www.fpml.org/2007/FpML-4-4 ../fpml-main-4-4.xsd http://www.w3.org/2000/09/xmldsig# ../xmldsig-core-schema.xsd" xsi:type="RequestTradeConfirmation"><!-- start of distinct --><strike><strikePrice>32.00</strikePrice></strike><numberOfOptions>150000</numberOfOptions><optionEntitlement>1.00</optionEntitlement><equityPremium><payerPartyReference href="party2"/><receiverPartyReference href="party1"/><paymentAmount><currency>EUR</currency><amount>405000</amount></paymentAmount><paymentDate><unadjustedDate>2001-07-17Z</unadjustedDate><dateAdjustments><businessDayConvention>NONE</businessDayConvention></dateAdjustments></paymentDate><pricePerOption><currency>EUR</currency><amount>2.70</amount></pricePerOption></equityPremium></equityOption><calculationAgent><calculationAgentPartyReference href="party1"/></calculationAgent><documentation><masterAgreement><masterAgreementType>ISDA2002</masterAgreementType></masterAgreement><contractualDefinitions>ISDA2002Equity</contractualDefinitions><!-- populate credit support document with correct value --><creditSupportDocument>TODO</creditSupportDocument></documentation><governingLaw>GBEN</governingLaw></trade><party id="party1"><partyId>Party A</partyId></party><party id="party2"><partyId>Party B</partyId></party></FpML> |
Это много лишних ненужных точек данных. Теперь давайте посмотрим на это с помощью Apache Avro .
С Avro контекст и значения разделены. Это означает, что схема / структура информации не сохраняется и не передается снова и снова, снова и снова (и снова).
Схема Avro хешируется. Таким образом, структура данных содержит только значение, и компьютер понимает отпечаток (хэш) схемы и может извлечь схему, используя отпечаток пальца.
|
1
|
0x d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
Этот тип реализации довольно типичен для пространства данных.
Когда вы сделаете это, вы можете уменьшить ваши данные между 20% -80%. Когда я рассказываю об этом людям, они сразу же спрашивают: «Почему такой большой промежуток неизвестных». Ответ в том, что не каждый XML создается одинаково. Но это проблема, потому что вы дублируете информацию, необходимую компьютеру для понимания данных. Конечно, XML приятно читать людям, но он не оптимизирован для компьютера.
Вот конвертер, над которым мы работаем по адресу https://github.com/stealthly/xml-avro, чтобы помочь людям освоить XML и перейти на более дешевые системы с открытым исходным кодом. Это позволяет вам сохранять части ваших систем (в частности, бизнес-код домена), используя XML и не требуя изменений (снижение рисков), а сохраняя и передавая данные с меньшими издержками (оптимизируя бюджет).