Што лепш: Python ці .NET для Azure Cosmos DB?

Што лепш: Python ці .NET для Azure Cosmos DB?

Арцём Мікуліч | АБАЖУРЫ

Я ўжо напісаў некалькі артыкулаў пра Azure Cosmos DB і лічу яе прывабнай для многіх сцэнароў. Але гэтымі днямі ў мяне была магчымасць паглядзець на яе пад нязвыклым вуглом.

Задача была ў пераносе значнага аб'ёму даных (мільёны запісаў) з аднаго кантэйнера Azure Cosmos DB у іншы, нязначна мадыфікуючы дакументы. Маленькая кансольная праграма на Python магла бы лёгка справіцца, так што я вырашыў паспрабаваць. У рэшце рэшт, мне хапіла 30 радкоў кода, каб атрымаць вынікі на невялікай выбарцы даных (спойлер: эквівалент на C# атрымаўся на 60 радкоў).

Тым не менш першая праблема ўзнікла, як толькі я пераключыўся з эмулятара на сапраўдны кантэйнер. Hierarchical Partition Keys не падтрымліваюцца Python SDK. Патлумачу, што Hierarchical Partition Keys – гэта новая фіча Cosmos DB, якая дазваляе больш эфектыўна размяркоўваць даныя і, такім чынам, спрыяць хуткасці базы. Я спадзяваўся падчас міграцыі пагуляцца з гэтай функцыяй, але на жаль сёння гэта магчыма толькі з .NET SDK.

Адмовіўшыся ад Hierarchical Partition Keys, я пайшоў далей, але хутка спатыкнуўся зноў. Калі SELECT вяртае зашмат запісаў (як у маім выпадку), Cosmos DB дадае ў вынік continuation token – спасылку на наступную старонку даных. Такім чынам можна паслядоўна чытаць вялікія аб’ёмы. Python SDK працуе з continuation token, але толькі ў межах аднаго Partition. Так, напрыклад, калі вы ў якасці Partition Key абралі ідэнтыфікатар кампаніі (ці tenant'а), то вы можаце атрымаць даныя толькі ў межах адной кампаніі. Я падумаў: "добра, той бяды. Толькі і трэба, што атрымаць спіс Partition Keys і перадаваць іх у запыты. Easy!".

SELECT c.PartitionKey FROM c GROUP BY c.PartitionKey

І ведаеце што? Гэта не спрацавала, бо Python SDK не падтрымлівае GROUP BY.

Пасля гэтага мне давялося адмовіцца ад сваёй ідэі і вярнуцца да .NET SDK, для якога няма ніводнай з пералічаных вышэй праблемаў.

Я пісаў раней, што за апошні час выйшаў цэлы шэраг фіч – Hierarchical Partition Keys, Burst Capacity, Partition Merge і г. д. Але асноўны акцэнт быў зроблены на .NET-кліентах, таму Cosmos DB Python SDK значна адстаў ад свайго калегі. Спадзяюся, што сітуацыя выправіцца цягам часу, а пакуль магу толькі параіць сачыць за існуючымі абмежаваннямі.

Report Page