Мы все знаем, какой 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 и не требуя изменений (снижение рисков), а сохраняя и передавая данные с меньшими издержками (оптимизируя бюджет).