SlideShare une entreprise Scribd logo
1  sur  34
Sirar Salih
Solution Architect at Making Waves
The Good, the Bad, the Ugly
Azure Table Storage
Balancing stakeholder influence and customer
needs
Hydro is a global enterprise, with many different
business stakeholders and content owners who have
different needs and priorities.
Finding a good balance between corporate consistency
and local business relevance while not falling into the
trap of designing according to internal organisation
rather than the customer can be challenging.
Manage
Stakeholders
Sirar Salih
Solution Architect at Making Waves
Who Am I?
Credit:
Each NoSQL database has its good and bad side.
Azure Table Storage
Pros
• Easy setup
• Cheap
• Minimal work required
• Easy to understand
• Simple model: Entity, PartitionKey,
RowKey
• Low on scalability
• Lack of basic database operations
- No «like» or «contains»
• No backup procedure
Cons
Setup & usage
https://portal.azure.com
https://portal.azure.com
Azure SDK
Azure Storage Explorer
private const string tableName = "Customers";
private static CloudTable _cloudTable;
public TableStorageService(KeyVaultSecretProvider keyVaultSecretProvider, string storageAccountName, string storageAccountKeyName)
{
var storageAccountKey = keyVaultSecretProvider.GetSecret(storageAccountKeyName);
var connectionString = $"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={storageAccountKey};EndpointSuffix=core.windows.net";
var cloudStorageAccount = CloudStorageAccount.Parse(connectionString);
var cloudTableClient = cloudStorageAccount.CreateCloudTableClient();
_cloudTable = cloudTableClient.GetTableReference(tableName);
}
Connect and create table
Azure Storage Explorer
public class CustomerEntity : TableEntity
{
public CustomerEntity() { }
public CustomerEntity(string lastName, string firstName)
{
PartitionKey = lastName;
RowKey = firstName;
}
}
Entity
var insertOperation = TableOperation.Insert(new CustomerEntity("Snow", "Jon"));
await _cloudTable.ExecuteAsync(insertOperation);
Insert entity
var tableBatchOperation = new TableBatchOperation();
for(var i = 0; i < 100; i++)
{
tableBatchOperation.Insert(new CustomerEntity("Snow", $"Jon {i}"));
if(i == 99) {
await _cloudTable.ExecuteBatchAsync(tableBatchOperation);
}
}
Batch insert entities
Get entity
var query = new TableQuery<CustomerEntity>()
.Where(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, "Jon"));
_cloudTable.ExecuteQuery(query);
Delete entity
var retrieveOperation = TableOperation.Retrieve<CustomerEntity>("Snow", "Jon");
var retrievedResult = await _cloudTable.ExecuteAsync(retrieveOperation);
var deleteEntity = (CustomerEntity)retrievedResult.Result;
var deleteOperation = TableOperation.Delete(deleteEntity);
await _cloudTable.ExecuteAsync(deleteOperation);
Blob containers
• Blob container: Similar to a folder, containing a collection of
blobs
• Blob: A file of any format
Connect and create blob container
private const string CustomersContainerName = "customers";
private static CloudBlobContainer _cloudBlobContainer;
public Job(string connectionString)
{
var cloudStorageAccount = CloudStorageAccount.Parse(connectionString);
var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
_cloudBlobContainer = cloudBlobClient.GetContainerReference(CustomersContainerName);
if (!_cloudBlobContainer.Exists()) _cloudBlobContainer.Create();
}
Upload blob
var cloudBlockBlob = _cloudBlobContainer.GetBlockBlobReference(blobName);
cloudBlockBlob.Properties.ContentType = "application/json";
using (var ms = new MemoryStream())
{
var j = JsonConvert.SerializeObject(json);
var writer = new StreamWriter(ms); writer.Write(j);
writer.Flush();
ms.Position = 0;
cloudBlockBlob.UploadFromStream(ms);
}
Download blob
var cloudBlockBlob = _cloudBlobContainer.GetBlockBlobReference(blobName);
await cloudBlockBlob.DownloadToFileAsync("C:Documentscustomer.json", FileMode.Create);
Delete blob
var cloudBlockBlob = _cloudBlobContainer.GetBlockBlobReference(blobName);
await cloudBlockBlob.DeleteIfExistsAsync();
Performance
Troy Hunt
Credit: https://www.troyhunt.com, Troy Hunt.
Troy Hunt
Credit: https://www.troyhunt.com, Troy Hunt.
Troy Hunt
• 9 simultaneous importers
• Total average speed at 22 500 inserts pr. second
Credit: https://www.troyhunt.com, Troy Hunt.
Credit: https://www.troyhunt.com, Troy Hunt.
Troy Hunt
http://haveibeenpwned.com/HowFastIsAzureTableStorage/?email=troyhunt@hotmail.com
• A query of 154 million records returns result in 4 milliseconds
Credit: https://www.troyhunt.com, Troy Hunt.
Mobile apps
• A good choice for mobile apps
• But Azure Easy Tables is better
- An app service
- Backed by Azure SQL and geared towards
mobile apps
https://github.com/Azure/azure-storage-ios
https://github.com/Azure/azure-storage-android
The way forward
• Azure Table storage lives on (we hope!)
• A need to get further support and new
functionality
• Lack of basic database operations is a problem
• Ease of setup and use is a definite plus, that’s
where Table storage shines
Thanks!
Credit:

Contenu connexe

Tendances

Single page application 07
Single page application   07Single page application   07
Single page application 07Ismaeel Enjreny
 
Who's afraid of front end databases?
Who's afraid of front end databases?Who's afraid of front end databases?
Who's afraid of front end databases?Gil Fink
 
윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들
윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들
윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들KH Park (박경훈)
 
NoSQL Data Modeling using Couchbase
NoSQL Data Modeling using CouchbaseNoSQL Data Modeling using Couchbase
NoSQL Data Modeling using CouchbaseBrant Burnett
 
Spring java config
Spring java configSpring java config
Spring java configSukjin Yun
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema DesignAlex Litvinok
 
XDate - a modern java-script date library
XDate -  a modern java-script date libraryXDate -  a modern java-script date library
XDate - a modern java-script date libraryGuo Albert
 
How to search extracted data
How to search extracted dataHow to search extracted data
How to search extracted dataJavier Collado
 
domain driven design talk
domain driven design talkdomain driven design talk
domain driven design talkRui Sun
 
In browser data stores
In browser data storesIn browser data stores
In browser data storesJames Thomas
 
MongoDB Charts Meetup - 7-24-2018
MongoDB Charts Meetup - 7-24-2018MongoDB Charts Meetup - 7-24-2018
MongoDB Charts Meetup - 7-24-2018Jay Gordon
 

Tendances (20)

Docker & Azure
Docker & AzureDocker & Azure
Docker & Azure
 
Google appengine
Google appengineGoogle appengine
Google appengine
 
Single page application 07
Single page application   07Single page application   07
Single page application 07
 
Who's afraid of front end databases?
Who's afraid of front end databases?Who's afraid of front end databases?
Who's afraid of front end databases?
 
윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들
윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들
윈도우 8의 새로운 컨트롤과 개발시 알아야 할 점들
 
Asp.Net MVC
Asp.Net MVCAsp.Net MVC
Asp.Net MVC
 
XAML Data Binding in UWP
XAML Data Binding in UWPXAML Data Binding in UWP
XAML Data Binding in UWP
 
NoSQL Data Modeling using Couchbase
NoSQL Data Modeling using CouchbaseNoSQL Data Modeling using Couchbase
NoSQL Data Modeling using Couchbase
 
Ajax
AjaxAjax
Ajax
 
Aleact
AleactAleact
Aleact
 
Ajax and Jquery
Ajax and JqueryAjax and Jquery
Ajax and Jquery
 
Spring java config
Spring java configSpring java config
Spring java config
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
 
XDate - a modern java-script date library
XDate -  a modern java-script date libraryXDate -  a modern java-script date library
XDate - a modern java-script date library
 
How to search extracted data
How to search extracted dataHow to search extracted data
How to search extracted data
 
Itb2018 wire box basics
Itb2018   wire box basicsItb2018   wire box basics
Itb2018 wire box basics
 
domain driven design talk
domain driven design talkdomain driven design talk
domain driven design talk
 
In browser data stores
In browser data storesIn browser data stores
In browser data stores
 
MongoDB Charts Meetup - 7-24-2018
MongoDB Charts Meetup - 7-24-2018MongoDB Charts Meetup - 7-24-2018
MongoDB Charts Meetup - 7-24-2018
 
Silverlight & WCF RIA
Silverlight & WCF RIASilverlight & WCF RIA
Silverlight & WCF RIA
 

Similaire à Azure Table Storage: The Good, the Bad, the Ugly (10 min. lightning talk)

Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)Sirar Salih
 
Building Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows AzureBuilding Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows AzureBill Wilder
 
MVVM Magic in SharePoint 2010 using Knockoutjs!
MVVM Magic in SharePoint 2010 using Knockoutjs!MVVM Magic in SharePoint 2010 using Knockoutjs!
MVVM Magic in SharePoint 2010 using Knockoutjs!jhendrix88
 
Creation of cloud application using microsoft azure by vaishali sahare [katkar]
Creation of cloud application using microsoft azure by vaishali sahare [katkar]Creation of cloud application using microsoft azure by vaishali sahare [katkar]
Creation of cloud application using microsoft azure by vaishali sahare [katkar]vaishalisahare123
 
Going Serverless with Azure Functions
Going Serverless with Azure FunctionsGoing Serverless with Azure Functions
Going Serverless with Azure FunctionsShahed Chowdhuri
 
TechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azureTechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azureДенис Резник
 
ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015Hossein Zahed
 
SQL Server 2014 Hybrid Cloud Features
SQL Server 2014 Hybrid Cloud FeaturesSQL Server 2014 Hybrid Cloud Features
SQL Server 2014 Hybrid Cloud FeaturesGuillermo Caicedo
 
NDC Minnesota - Analyzing StackExchange data with Azure Data Lake
NDC Minnesota - Analyzing StackExchange data with Azure Data LakeNDC Minnesota - Analyzing StackExchange data with Azure Data Lake
NDC Minnesota - Analyzing StackExchange data with Azure Data LakeTom Kerkhove
 
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developers
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developersChris O'Brien - Best bits of Azure for Office 365/SharePoint developers
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developersChris O'Brien
 
Google App Engine Developer - Day4
Google App Engine Developer - Day4Google App Engine Developer - Day4
Google App Engine Developer - Day4Simon Su
 
Web Components Everywhere
Web Components EverywhereWeb Components Everywhere
Web Components EverywhereIlia Idakiev
 
Hibernate jj
Hibernate jjHibernate jj
Hibernate jjJoe Jacob
 
Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJSWei Ru
 
NoSQL Endgame DevoxxUA Conference 2020
NoSQL Endgame DevoxxUA Conference 2020NoSQL Endgame DevoxxUA Conference 2020
NoSQL Endgame DevoxxUA Conference 2020Thodoris Bais
 
Data Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your DataData Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your DataSaptak Sen
 
Data Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your DataData Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your DataSaptak Sen
 
jclouds overview
jclouds overviewjclouds overview
jclouds overviewAdrian Cole
 
Building Reusable Custom Elements With Angular
Building Reusable Custom Elements With AngularBuilding Reusable Custom Elements With Angular
Building Reusable Custom Elements With AngularIlia Idakiev
 

Similaire à Azure Table Storage: The Good, the Bad, the Ugly (10 min. lightning talk) (20)

Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
 
Building Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows AzureBuilding Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows Azure
 
MVVM Magic in SharePoint 2010 using Knockoutjs!
MVVM Magic in SharePoint 2010 using Knockoutjs!MVVM Magic in SharePoint 2010 using Knockoutjs!
MVVM Magic in SharePoint 2010 using Knockoutjs!
 
Creation of cloud application using microsoft azure by vaishali sahare [katkar]
Creation of cloud application using microsoft azure by vaishali sahare [katkar]Creation of cloud application using microsoft azure by vaishali sahare [katkar]
Creation of cloud application using microsoft azure by vaishali sahare [katkar]
 
Going Serverless with Azure Functions
Going Serverless with Azure FunctionsGoing Serverless with Azure Functions
Going Serverless with Azure Functions
 
TechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azureTechEd 2012 - Сценарии хранения и обработки данных в windows azure
TechEd 2012 - Сценарии хранения и обработки данных в windows azure
 
ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015
 
SQL Server 2014 Hybrid Cloud Features
SQL Server 2014 Hybrid Cloud FeaturesSQL Server 2014 Hybrid Cloud Features
SQL Server 2014 Hybrid Cloud Features
 
NDC Minnesota - Analyzing StackExchange data with Azure Data Lake
NDC Minnesota - Analyzing StackExchange data with Azure Data LakeNDC Minnesota - Analyzing StackExchange data with Azure Data Lake
NDC Minnesota - Analyzing StackExchange data with Azure Data Lake
 
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developers
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developersChris O'Brien - Best bits of Azure for Office 365/SharePoint developers
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developers
 
Google App Engine Developer - Day4
Google App Engine Developer - Day4Google App Engine Developer - Day4
Google App Engine Developer - Day4
 
Web Components Everywhere
Web Components EverywhereWeb Components Everywhere
Web Components Everywhere
 
Hibernate jj
Hibernate jjHibernate jj
Hibernate jj
 
Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
 
NoSQL Endgame DevoxxUA Conference 2020
NoSQL Endgame DevoxxUA Conference 2020NoSQL Endgame DevoxxUA Conference 2020
NoSQL Endgame DevoxxUA Conference 2020
 
Data Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your DataData Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your Data
 
Data Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your DataData Management in Microsoft HDInsight: How to Move and Store Your Data
Data Management in Microsoft HDInsight: How to Move and Store Your Data
 
jclouds overview
jclouds overviewjclouds overview
jclouds overview
 
Building Reusable Custom Elements With Angular
Building Reusable Custom Elements With AngularBuilding Reusable Custom Elements With Angular
Building Reusable Custom Elements With Angular
 
Angular
AngularAngular
Angular
 

Plus de Sirar Salih

Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!Sirar Salih
 
Test Driving AngularJS
Test Driving AngularJSTest Driving AngularJS
Test Driving AngularJSSirar Salih
 
Test Driven Development with AngularJS
Test Driven Development with AngularJSTest Driven Development with AngularJS
Test Driven Development with AngularJSSirar Salih
 
One Framework to Rule Them All
One Framework to Rule Them AllOne Framework to Rule Them All
One Framework to Rule Them AllSirar Salih
 
When Two Forces Meet
When Two Forces MeetWhen Two Forces Meet
When Two Forces MeetSirar Salih
 
Introduction to WPF and MVVM
Introduction to WPF and MVVMIntroduction to WPF and MVVM
Introduction to WPF and MVVMSirar Salih
 
Angularfying Your ASP.NET MVC APP
Angularfying Your ASP.NET MVC APPAngularfying Your ASP.NET MVC APP
Angularfying Your ASP.NET MVC APPSirar Salih
 

Plus de Sirar Salih (8)

Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!
 
Test Driving AngularJS
Test Driving AngularJSTest Driving AngularJS
Test Driving AngularJS
 
Test Driven Development with AngularJS
Test Driven Development with AngularJSTest Driven Development with AngularJS
Test Driven Development with AngularJS
 
One Framework to Rule Them All
One Framework to Rule Them AllOne Framework to Rule Them All
One Framework to Rule Them All
 
When Two Forces Meet
When Two Forces MeetWhen Two Forces Meet
When Two Forces Meet
 
Introduction to WPF and MVVM
Introduction to WPF and MVVMIntroduction to WPF and MVVM
Introduction to WPF and MVVM
 
Clean Code
Clean CodeClean Code
Clean Code
 
Angularfying Your ASP.NET MVC APP
Angularfying Your ASP.NET MVC APPAngularfying Your ASP.NET MVC APP
Angularfying Your ASP.NET MVC APP
 

Dernier

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 

Dernier (20)

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 

Azure Table Storage: The Good, the Bad, the Ugly (10 min. lightning talk)

  • 1. Sirar Salih Solution Architect at Making Waves The Good, the Bad, the Ugly Azure Table Storage
  • 2. Balancing stakeholder influence and customer needs Hydro is a global enterprise, with many different business stakeholders and content owners who have different needs and priorities. Finding a good balance between corporate consistency and local business relevance while not falling into the trap of designing according to internal organisation rather than the customer can be challenging. Manage Stakeholders Sirar Salih Solution Architect at Making Waves Who Am I? Credit:
  • 3.
  • 4. Each NoSQL database has its good and bad side.
  • 6. Pros • Easy setup • Cheap • Minimal work required • Easy to understand • Simple model: Entity, PartitionKey, RowKey
  • 7. • Low on scalability • Lack of basic database operations - No «like» or «contains» • No backup procedure Cons
  • 13. private const string tableName = "Customers"; private static CloudTable _cloudTable; public TableStorageService(KeyVaultSecretProvider keyVaultSecretProvider, string storageAccountName, string storageAccountKeyName) { var storageAccountKey = keyVaultSecretProvider.GetSecret(storageAccountKeyName); var connectionString = $"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={storageAccountKey};EndpointSuffix=core.windows.net"; var cloudStorageAccount = CloudStorageAccount.Parse(connectionString); var cloudTableClient = cloudStorageAccount.CreateCloudTableClient(); _cloudTable = cloudTableClient.GetTableReference(tableName); } Connect and create table
  • 15. public class CustomerEntity : TableEntity { public CustomerEntity() { } public CustomerEntity(string lastName, string firstName) { PartitionKey = lastName; RowKey = firstName; } } Entity
  • 16. var insertOperation = TableOperation.Insert(new CustomerEntity("Snow", "Jon")); await _cloudTable.ExecuteAsync(insertOperation); Insert entity
  • 17. var tableBatchOperation = new TableBatchOperation(); for(var i = 0; i < 100; i++) { tableBatchOperation.Insert(new CustomerEntity("Snow", $"Jon {i}")); if(i == 99) { await _cloudTable.ExecuteBatchAsync(tableBatchOperation); } } Batch insert entities
  • 18. Get entity var query = new TableQuery<CustomerEntity>() .Where(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, "Jon")); _cloudTable.ExecuteQuery(query);
  • 19. Delete entity var retrieveOperation = TableOperation.Retrieve<CustomerEntity>("Snow", "Jon"); var retrievedResult = await _cloudTable.ExecuteAsync(retrieveOperation); var deleteEntity = (CustomerEntity)retrievedResult.Result; var deleteOperation = TableOperation.Delete(deleteEntity); await _cloudTable.ExecuteAsync(deleteOperation);
  • 20. Blob containers • Blob container: Similar to a folder, containing a collection of blobs • Blob: A file of any format
  • 21. Connect and create blob container private const string CustomersContainerName = "customers"; private static CloudBlobContainer _cloudBlobContainer; public Job(string connectionString) { var cloudStorageAccount = CloudStorageAccount.Parse(connectionString); var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient(); _cloudBlobContainer = cloudBlobClient.GetContainerReference(CustomersContainerName); if (!_cloudBlobContainer.Exists()) _cloudBlobContainer.Create(); }
  • 22. Upload blob var cloudBlockBlob = _cloudBlobContainer.GetBlockBlobReference(blobName); cloudBlockBlob.Properties.ContentType = "application/json"; using (var ms = new MemoryStream()) { var j = JsonConvert.SerializeObject(json); var writer = new StreamWriter(ms); writer.Write(j); writer.Flush(); ms.Position = 0; cloudBlockBlob.UploadFromStream(ms); }
  • 23. Download blob var cloudBlockBlob = _cloudBlobContainer.GetBlockBlobReference(blobName); await cloudBlockBlob.DownloadToFileAsync("C:Documentscustomer.json", FileMode.Create);
  • 24. Delete blob var cloudBlockBlob = _cloudBlobContainer.GetBlockBlobReference(blobName); await cloudBlockBlob.DeleteIfExistsAsync();
  • 28. Troy Hunt • 9 simultaneous importers • Total average speed at 22 500 inserts pr. second Credit: https://www.troyhunt.com, Troy Hunt. Credit: https://www.troyhunt.com, Troy Hunt.
  • 29. Troy Hunt http://haveibeenpwned.com/HowFastIsAzureTableStorage/?email=troyhunt@hotmail.com • A query of 154 million records returns result in 4 milliseconds Credit: https://www.troyhunt.com, Troy Hunt.
  • 30. Mobile apps • A good choice for mobile apps • But Azure Easy Tables is better - An app service - Backed by Azure SQL and geared towards mobile apps
  • 33. The way forward • Azure Table storage lives on (we hope!) • A need to get further support and new functionality • Lack of basic database operations is a problem • Ease of setup and use is a definite plus, that’s where Table storage shines