You are here

Feed aggregator

Writing a ReleaseManagement extension for cloning an existing release definition

MSDN Blogs - Thu, 05/05/2016 - 03:17

Code shared :- https://github.com/openalm/vsts-rm-extensions/tree/master/rd-export-import-clone-TFS2015U2

How to make Changes:-

Step1: Clone the repository using the link https://github.com/openalm/vsts-rm-extensions.git

Step2: Open a command prompt and go till folder 'rd-export-import-clone-TFS2015U2'

Step3: Run 'bower install' [ pre-requsite for running 'bower' can be referred https://github.com/Microsoft/vsts-extension-samples] which will download 1.95.2 version of VSS.SDK.js

Step4: Make your changes

Step5:  Run 'tfx extension create' to generate .vsix package in the current directory.  [Refer 'Try the extension in Visual Studio Team Services' section https://github.com/Microsoft/vsts-extension-samples]

Step6: Done!!!!

How to add 'Clone' as contextmenu item for ReleaseDefinition

[A generic how to add item in context menu is explained https://www.visualstudio.com/en-us/integrate/extensions/develop/add-action, below steps will explain similarly in context of ReleaseManagement]

Changes required  in vss-extension.json [ Refer above shared code]

Step1: Add below as "scopes" in vss-extension.json  [Read more about ReleaseManagement scopes under 'Scopes' section in https://www.visualstudio.com/en-us/integrate/extensions/develop/manifest

           "scopes": ["vso.release_execute"]

Step2: As we wanted to add one more item in the release definition context menu hence we will add one contribution (as below) in the vss-extension.json targeting "ms.vss-releaseManagement-web.release-definition-explorer-toolbar-menu" [ to learn more release management contribution point refer https://www.visualstudio.com/integrate/extensions/reference/targets/overview ]

      {
            "id": "importDefinitionToolbarMenu",
            "type": "ms.vss-web.action",
            "description": "Import definition(s) menu",
            "targets": [
                "ms.vss-releaseManagement-web.release-definition-explorer-toolbar-menu"
            ],
            "properties": {
                "title": "Import release definition",
                "icon": "images/icon-import-16.png",
                "group": "actions",
                "uri": "main.html"
            }
        }

Changes required  in main.js [Refer method cloneDefinitionContextMenu() in above shared code ]

Step1:- Create a rmClient using

var rmClient = VSS_Service.getCollectionClient(RM_WebApi.ReleaseHttpClient);

Step2: Make a getReleaseDefinition() call to get the definition object for the given id

    rmClient.getReleaseDefinition(vsoContext.project.id,sourceItemContext.definition.id)

Step3: Update the definition name

   definition.name = newDefinitionName;

Step4: Create a new definition using updated definition object in Step#3 above

   rmClient.createReleaseDefinition(definition, vsoContext.project.id)

Step5: Refresh the UI to show the newly created definition

    sourceItemContext.view.refresh();

Step6: Done!!!!

 

Complete code for quick reference :-

var cloneDefinitionContextMenu = (function () { "use strict"; return { execute: function (sourceItemContext) { // Load VSTS controls and REST client VSS.require(["VSS/Controls", "VSS/Service", "ReleaseManagement/Core/RestClient"], function (Controls, VSS_Service, RM_WebApi) { var newDefinitionName = prompt("New definition name:", sourceItemContext.definition.name + " - Copy"); if (newDefinitionName != null) { sourceItemContext.view.logMessage("Creating " + newDefinitionName + "..."); var vsoContext = VSS.getWebContext(); // Get a RM client to make REST calls var rmClient = VSS_Service.getCollectionClient(RM_WebApi.ReleaseHttpClient); rmClient.getReleaseDefinition(vsoContext.project.id,sourceItemContext.definition.id).then(function(definition){ definition.name = newDefinitionName; rmClient.createReleaseDefinition(definition, vsoContext.project.id).then(() => { sourceItemContext.view.refresh(); sourceItemContext.view.logMessage("Cloned \'"+ sourceItemContext.definition.name +"\' and created \'" + newDefinitionName + "\'"); }, function(error){ sourceItemContext.view.logError(error); }); }, function(error){ sourceItemContext.view.logError(error); }); } }); } } }());

Using Clone, Export and Import an existing release definition for TFS2015 Update2

MSDN Blogs - Thu, 05/05/2016 - 01:50

Summary:- A ReleaseManagement extension for Cloning, Importing and Exporting an existing release definition is released in the VisualStudio marketplace at https://marketplace.visualstudio.com/items?itemName=ms-devlabs.rm-clone-rd . But as it uses some improvement done post release of TFS2015U2 hence it doesn't allow to be installed for TFS2015U2. I have tried to write another extension with slight variation of experience (explained below).

How it's different from one released to VisualStudio marketplace :- Extension published at VisualStudio marketplace open the release definition to be saved after clicking the clone (from context menu) or import (from toolbar). Where as extension for TFS2015U2 makes direct REST call and creates a clone or import of an existing release definition. Though you can update and change it later as normal flow.

Code is sharedhttps://github.com/openalm/vsts-rm-extensions/tree/master/rd-export-import-clone-TFS2015U2

How to Install it for TFS2015U2 :-

Step1:- Download above mentioned repo which contains already build ms-devlabs.rm-import-export-0.0.1.vsix

Step2: open http://<tfsserverurl>/tfs/_gallery/manage

Step3:- Click on 'Upload new extension'

Step4: Give path to ms-devlabs.rm-import-export-0.0.1.vsix (as downloaded in step#1 above)

Step5: Click on the 'Install' button for the referred extension

Step6:- You should be able to see the Clone, Export in the release definition context menu and Import the new definition toolbar.

Step7: Done

Microsoft Account

MSDN Blogs - Wed, 05/04/2016 - 21:27

El primer componente a utilizar en mi reto es un Microsoft Account, anteriormente conocido como Passport o simplemente una cuenta de “Hotmail” o “Outlook”. Este es uno de los recursos más importantes a la hora de tomar ventaja de la plataforma Microsoft, muchos piensan que simplemente se trata de una cuenta de correo pero no es así, este elemento brinda acceso a muchos otros servicios, el rol principal de un Microsot Account es brindar una identidad a la cual se pueden asociar servicios y beneficios, el correo asociado es solamente una conveniencia (más adelante escribiré un poco sobre las cosas interesantes que pueden hacerse con Outlook.com)

Para acceder a los beneficios es necesario ir a http://login.live.com; si ya se tiene una cuenta basta con ingresar las credenciales, si no se tiene es posible crear una partir de esta página.

Luego deben proporcionarse algunos datos para establecer la identidad, es importante mencionar que puede utilizarse una dirección de correo existente, no necesariamente debe ser Outlook o Hotmail, si utilizas por ejemplo una dirección de correo de GMail, puedes convertirla en tu Microsoft Account sin ningún problema.

Una vez finalizados estos pasos nuestra cuenta de Microsoft estará lista y podremos empezar a hacer uso de muchas características, yo aproveché para crear una nueva cuenta en Outlook.com que me brindará acceso adicional a características de productividad como Office Online y OneDrive.

Mi primer paso está terminado, es hora de empezar a instalar herramientas y conectar servicios!

DBCC INDEXDEFRAG

MSDN Blogs - Tue, 05/03/2016 - 05:00

Esse é mais um artigo da série “Saga da otimização com comandos antigos”

No último artigo, falei sobre a forma mais rápida de executar um scan. Nesse artigo vou falar sobre o INDEX SCAN.

Seria ele mais rápido que o HEAP SCAN do artigo anterior?

Vamos começar colocando ordem na heap!

Heap é Desorganizada

Heap scan é uma técnica muito rápida porque favorece o uso das operações de read-ahead.

Entretanto, imagine o que acontece quando sabemos que a query retorna apenas um registro:

SELECT * FROM produtos WHERE id = 1234

Isso poderia ser reescrito assim:

SELECT TOP(1) * FROM produtos WHERE id = 1234

A primeira query realiza a leitura da tabela inteira para retornar todos os produtos com ID = 1234 e o comando faz a leitura de todos os registros para se certificar que, de fato, existe apenas um registro. Por outro lado, a segunda query usa TOP(1) para notificar que é necessário apenas um registro. Assim, o comando realiza o scan de tabela e finaliza logo que encontrar o primeiro registro. Estatisticamente, podemos dizer que a segunda query executa na metade do tempo da primeira.

Concluímos que a heap é um conjunto desorganizado de página de dados, ou seja, a única forma de acesso é através do Heap Scan. Uma das formas de tornar o acesso mais rápido é usando o TOP(n) para encerrar o scan o mais rápido possível.

Heap Organizada

Existe uma forma de tornar a Heap mais eficiente: ordenando os registros nas páginas de dados.

Heap: dados desorganizados – será que existe o ID = 1234? onde?

Heap Organizada: é fácil de encontrar o ID = 1234.

Tornar a heap organizada é fácil! Basta transformar a Heap em uma Tabela com Clustered Index.

Clustered Index

Clustered Index. Sim, esse é o nome de uma Heap Organizada.

Infelizmente não gosto desse nome porque muita gente considera o Clustered Index mais como índice ao invés de Tabela. Índice é uma estrutura para ajudar o desempenho do banco de dados e você pode criar vários na mesma tabela (10, 20, 30..). Entretanto, o Clustered Index é especial e você só pode criar um porque ele é a própria tabela! Não há como organizar a Heap de duas formas diferentes ao mesmo tempo.

Clustered index organiza as páginas da tabela. A forma mais fácil de enxergar isso é através do comando DBCC IND. Vamos investigar o index_id = 1, que corresponde ao índice clustered.

A página 1:549 aponta para a próxima página next_id = 1:548 e anterior prev_id = 1:550. Podemos investigar a página anterior 1:550, que aponta para as páginas 1:549 e 1:551. Aqui é possível ver que a primeira página da tabela é a 1:557, pois ela não possui um ponteiro para a página anterior.

 

Desorganizando o Clustered Index

Sempre que realizamos uma operação de Table Scan em uma tabela com índice clustered, dizemos que:

Table Scan = Clustered Index Scan

Em geral o desempenho do Clustered index scan é comparável com o Heap scan. O motivo é que as páginas estão organizadas e fica fácil de encontrar as informações. Entretanto, existe uma forma de bagunçar o local onde os dados estão fisicamente armazenados: basta fragmentar a tabela e começar a distribuir os dados em diferentes páginas.

Primeiro vamos criar uma tabela e adicionar a ordenação com índice clustered:

Em seguida, adicionamos os produtos sem uma ordem específica.

O resultado do DBCC IND mostra claramente que as páginas anteriores e posteriores estão completamente fora de ordem.

Como as páginas estão desordenadas, Clustered Index Scan não consegue executar transformar as operações de leitura em operações de read-ahead.

Isso torna o acesso ao índice mais lento. Como resolver? Basta desfragmentar o índice. No passado, usava-se bastante o comando DBCC INDEXDEFRAG. Hoje não há motivo para usar o INDEXDEFRAG, pois se tornou obsoleto. Ao invés disso, procure usar a sintaxe do ALTER INDEX REORGANIZE que possui mais flexibilidade e suporte a partições.

ALTER INDEX nome_indice ON produtos REORGANIZE

Pronto! Agora o clustered index scan é praticamente tão rápido quanto heap scan e deixa a tabela organizada.

Conclusão

É recomendado organizar os dados da tabela usando um índice clustered.

Nesse artigo comentei que o desempenho Clustered Index scan é igual ao Heap scan ou inferior (quando o índice se encontra fragmentado). Portanto, criar um índice clustered sem qualquer estudo pode causar degradação de performance.

Criar um clustered index incorreto é pior do que não te-lo.

No próximo artigo vamos explorar um pouco mais a estrutura do índice, também conhecida por BTree+.

¿Por qué Microsoft?

MSDN Blogs - Tue, 05/03/2016 - 00:01

Uno de los aspectos más interesantes de mi trabajo es poder ayudar a nuestros clientes a obtener el máximo beneficio de nuestros productos y servicios, pero esto no es una tarea fácil; a través de los años he notado que como compañía debemos trabajar un más para dar a conocer un poco mejor nuestras herramientas.

He decidido retomar mi abandonado blog para mostrar algunas ideas de como tomar ventaja de productos, servicios y ofertas para desarrollar soluciones de alta calidad; mi objetivo es mostrar como la plataforma puede ser utilizada por estudiantes y profesionales para crear soluciones complejas y con características empresariales.

Pero… ¿y las licencias?

Esta es una de las primeras preguntas que surgen al hablar de Microsoft, muchos señalan que hay alternativas que trabajan muy bien y que no requieren pago. Lo cierto es que Microsoft tiene una amplia gama de productos y servicios, muchos de los cuales son gratuitos pero no muchas personas los conocen, mi reto será mostrar características avanzadas utilizando todos los recursos gratuitos disponibles para estudiantes, entusiastas profesionales y emprendedores que desean aventurarse en nuestra plataforma; mi punto de partida y única licencia requerida será un Windows 10 Home que es el sistema operativo más básico de la familia Windows, el experimento consiste en ver que tanto puedo lograr con una computadora que solo incluye este sistema operativo.

Deséenme suerte

28th Career Day Brings More Than 60 Employers To Campus

SPSCC Posts & Announcements - Thu, 04/28/2016 - 13:42
*May 12 event runs from 10 a.m. to 2 p.m. *Job seekers should come prepared with resumes and dressed professionally *Event is free and open to the public

Using ReleaseHttpClient for interacting with ReleaseManagement service

MSDN Blogs - Wed, 04/27/2016 - 23:49

ReleaseHttpClient is public as nuget package : https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Release.Client

Step1: Create one 'Windows Console Application' using Visual studio 2015

Step2: Goto Tools -->NuGet Package Manager --> Manage NuGet Packages for Solutions --> Browse (make sure Package source: nuget.org)

Step3: Search and Install following package to your solution

  •  Microsoft.VisualStudio.Services.Release.Client
  • Microsoft.VisualStudio.Services.InteractiveClient

Step4: Add following code to fetch all release definitions for a given project. Please update your tenant and project name in below sample.

using System; using Microsoft.VisualStudio.Services.Client; using Microsoft.VisualStudio.Services.Common; using Microsoft.VisualStudio.Services.ReleaseManagement.WebApi.Clients; namespace ReleaseHttpClientSample { class Program { static void Main(string[] args) { Uri serverUrl = new Uri("https://{your tenant name}.vsrm.visualstudio.com/DefaultCollection"); VssCredentials credentials = new VssClientCredentials(); credentials.Storage = new VssClientCredentialStorage(); VssConnection connection = new VssConnection(serverUrl, credentials); ReleaseHttpClient rmClient = connection.GetClient<ReleaseHttpClient>(); var releaseDefinitions = rmClient.GetReleaseDefinitionsAsync("{your project name}").Result; Console.Out.WriteLine("Release definitions " + releaseDefinitions.Count); } } }

Step5: Done

 

File order matters with TypeScript inheritance

MSDN Blogs - Wed, 04/27/2016 - 13:40

If you receive the following JavaScript error and your code contains a TypeScript class derived from another class, it is likely that your parent class has not been defined prior to the definition of your child class.

Unable to get property ‘prototype’ of undefined or null reference

To see the actual error, you will need to view the generated JavaScript file, which may look like this:

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};

The cause of this problem is that TypeScript requires the parent class to appear before the child class. If the classes have been defined in separate files, then the scripts must be loaded onto the page in the correct order.

In my case I am using the ASP.NET MVC bundler which loads files alphabetically. So one solution could be to name my file appropriately, however I decided instead to specifically list the files in the correct order within the bundle. For example:

Using PAT token in ReleaseManagement REST API's

MSDN Blogs - Tue, 04/26/2016 - 23:42

Generating PAT Token:-

Step1: Generate PAT token by visiting your profile and selecting the right ReleaseManagement scope as per API need ( see 'Available scopes' section https://www.visualstudio.com/en-us/integrate/extensions/develop/manifest )

Step2: Copy the token generated after clicking 'Create Token' as shown in image above

 

Code which uses the generated PAT token above :-

public static async Task<string> GetReleaseDefinitionsUsingPATToken() { var username = "nobody"; var token = "<Give your PAT Token here>"; var url = "https://{accountname}.vsrm.visualstudio.com/DefaultCollection/{projectname}/_apis/release/definitions?api-version=3.0-preview.1"; using (HttpClient client = new HttpClient()) { var mediaTypeHeader = new MediaTypeWithQualityHeaderValue("application/json"); client.DefaultRequestHeaders.Accept.Add(mediaTypeHeader); var credentialBytes = Encoding.ASCII.GetBytes($"{username}:{token}"); var encodedCredentialBytes = Convert.ToBase64String(credentialBytes); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encodedCredentialBytes); var response = await client.GetAsync(url); var body = await response.Content.ReadAsStringAsync(); return body; } }

 

 

 

DBCC IND

MSDN Blogs - Tue, 04/26/2016 - 05:00

Esse é mais um artigo da série “Saga da otimização com comandos antigos”

No último artigo, apresentei um problema muito comum nas estruturas HEAPS para armazenamento de dados. Agora vamos falar da equivalência:

Table scan = Heap scan = Allocation ordered scan = IAM scan

Você sabe o que isso significa? Vamos começar explicando o conceito central, que é a Heap.

Heap

Heap é uma estrutura de dados composta apenas por um conjunto de página de dados. Encontramos várias referências nas quais Heap é sinônimo de Tabela, por isso, é comum dizer que:

Table scan = Heap scan

Isso faz sentido, pois muitas vezes a Tabela corresponde aos dados na forma lógica:

Enquanto que a Heap representa o conjunto de páginas que armazenam os dados, ou seja, seria a forma física:

 

Index Allocation Map (IAM)

Além das páginas de dados, existe uma página (ou mais páginas quando a tabela é grande) denominada de Index Allocation Map (IAM).

Também é comum ouvir que:

Heap scan = Allocation ordered scan = IAM scan

O conceito é simples! Fica mais fácil de entender com a ajuda do comando DBCC IND.

DBCC IND(dbid, table, 0)

FID = File_ID
PID = Page_ID

Aqui observamos a tabela é composta pelas páginas: 329, 537-543, 360-363, sendo que todas pertencem ao arquivo (FID) 1. Também observamos que o IAM corresponde à página 1:329 (FILE_ID=1, PAGE_ID=329) e ele contém o ponteiro para todas as páginas. Ela seria o mapeamento de todas as páginas que pertencem a um determinado objeto.

Podemos dizer que uma estrutura de alocação é composta por uma ou mais páginas IAM. Isso ocorre porque o IAM possui apenas 8Kb de tamanho e nem sempre consegue armazenar todos os ponteiros necessários. Portanto, um Allocation Unit é igual a um conjunto de IAM.

IAM Scan

Como disse no começo do artigo, temos a equivalência:

Table scan = Heap scan = Allocation ordered scan = IAM scan

Que poderia ser quebrada em partes:

Table e Heap

Tabela é uma entidade lógica composta pelos DADOS e METADADOS. No desenho anterior, a primeira linha da tabela corresponde ao cabeçalho, que corresponde ao nome das colunas. Esse é o metadado, que descreve as colunas e os tipos de dado. Os dados brutos são armazenados em uma estrutura de dados, que no caso é a Heap. Nem sempre os dados ficam em uma Heap. Poderia ser uma estrutura do tipo BTree+ ou os dados ficam distribuídos entre várias estruturas Heaps/BTrees (ex: Particionamento).

Heap e Allocation Unit

Allocation Unit é um espaço de alocação no disco. Heap pode utilizar 3 Allocation Units ao mesmo tempo: In-Row, Row Overflow, LOB. Quando falamos em um Heap scan, estamos falando de uma operação de Scan em um Allocation Unit corresponde ao In-Row.

Allocation Unit e IAM

Allocation Unit corresponde ao conjunto de IAM. IAM é uma página de 8Kb com ponteiros para Extents, estando diretamente relacionado com os arquivos em disco. IAM possui ponteiros entre outros IAM (lista duplamente ligada). Por outro lado, Allocation Unit corresponde a uma estrutura que ajuda o banco de dados a alocar espaço em disco sem se preocupar com os detalhes dos arquivos.

No fim concluímos que: Table, Heap, Allocation Unit e IAM são conceitos bem diferentes.

Então por que dizer que existe uma equivalência entre as operações de scan? Não sei exatamente o motivo, mas muita gente usa essas expressões livremente. O importante é deixar claro que o IAM scan é a operação mais rápida de Table Scan presente no SQL Server. IAM scan aumenta a chance de realizar operações de read-ahead usando um mecanismo chamado de “read-scatter”, que procura agregar as operações de leituras sequenciais próximas.

No próximo artigo, vamos ver a estrutura de BTree e introduzir um conceito chamado de Index Scan. Será que esse mecanismo é mais rápido que o Heap scan?

Serverless Azure Architecture, Simple Forms

MSDN Blogs - Mon, 04/25/2016 - 00:11
Serverless Azure Architecture, Simple Forms

I hate complex software, not just out of laziness (definitely a big part of it) but I honestly do think that simple software is easier to maintain in the long run and usually better asset to software companies than complex software is.

Azure has just recently gotten a new service “Azure Functions” : https://azure.microsoft.com/en-us/documentation/articles/functions-overview/ which is a fine example of simple thing that can drive enormous business value. Basically it is a system which allows You to create a reasonably rich solution by simple scripting while allowing serverless execution.  This shifts the attention to application logic, not application infrastructure. Besides, scripting is fun … which is more important than one might think at first.

Scripting, not software development project

So I took a closer look at the functions and decided to test with something that has some real value, something that implements an actual use case that my customers have.  This case is Simple Feedback Forms. Simple forms are basically forms that You might want to use when asking company’s employees whether they will participate to next field day and what employees thought of the services they’ve been getting from IT or customer feedback form … just to name a few usage scenarios.

I decided to implement the actual forms in HTML5 so users could use whatever clients they happen to have handy. The backend would be Azure Sql database for easy reporting. Finally the little logic (the script) in the middle would be implemented in C# even I have been writing a lot about Node.js and other non-microsoft languages, this time I just felt like writing some C#.

1.       The browser makes a request towards our published function
2.       The function fetches the correct form html from blobstorage and serves it to browser
3.       The user fills in the form and presses submit
4.       The function saves the data into Azure Sql Db for later processing
5.       Power Bi report shows a report based on the collected data

Serverless doesn’t mean free

The cool thing is that we do not have to reserve any server capacity beforehand and we pay only for those seconds that our function does any processing. On top of this we have a cheap Sql Database and miniscule amount of storage on blob storage services.  We can use the database for various other usages and same goes for the storage. I could have used a TableStorage for storing the data (cheaper than sql) but my customer is very good with sql reporting tools so let’s do it this time like this. One interesting result of my Sql usage was that the script needed more memory to run, instead of the minimal 128 MB the script required 256 , and that costs a tad more. 

Implementation notes

The system was very easy to implement once I figured out the correct way to send and receive ajax-requests since there was not much documentation available at the time of writing. Another big thing was the pattern of utility modules, i.e. having all utility functions in a separate module so they would not clutter the main script logic. Overall a very enjoyable experience.

 

 Resources

I have stored all the solution files and step-by-step guide here:

AppUtils.cs   App.cs   Step By step   Whats next ?

Maybe user authentication for these forms and definitely some "Azure Functions"-based real time Dashboarding . Stay tuned ...

 

Criando um Docker Host Linux no Azure

MSDN Blogs - Thu, 04/21/2016 - 17:18

Referência: https://docs.docker.com/v1.9/engine/installation/azure

O que é o Docker? https://www.docker.com/what-docker

Existem diferentes formas de criar um Docker Host, vou demonstrar uma delas nesse post.

O primeiro passo será criar uma nova máquina virtual com Linux no Azure que suporte a extensão Docker VM. Nesse caso irei utilizar uma imagem da galeria do Azure para facilitar o trabalho, Ubuntu Server 15.10.

Em determinado passo no processo de configuração para criar a nova máquina virtual, será possível incluir extensões. Vamos incluir a Docker Extension.

Para que seja possível criar a VM com a extensão do Docker, no momento de instalação da extensão é necessário realizar o upload de três certificados para o Docker Engine e configurar a porta de conexão.

Para a criação dos certificados serão seguidas as seguintes recomendações: https://docs.docker.com/engine/security/https.

Utilizei uma outra máquina Linux que tenho para a criação dos certificados. Também é possível instalar a VM sem essa extensão e realizar o processo de instalação manual após a criação da VM, mas preferi facilitar o processo e ter a VM com ela instalada desde o início.

Após a criação, devemos selecionar os certificados criados.

Por fim, falta validar as configurações e finalizar a criação da VM.

Quando a VM estiver criada, vamos configurar um DNS name label para encontrar a máquina de forma mais fácil e eficiente. Basta clicar nas configurações de Public IP –> Settings –> Configuration –> DNS name label.

Na criação dos certificados esse DNS pode ser utilizado na configuração de CN.
Ex.: openssl req -subj "/CN=host.southcentralus.cloudapp.azure.com" -new -key server-key.pem -out server.csr

O próximo passo é criar um novo endpoint para que seja possível encontrar o Docker Host criado no Azure. Clique no Network Security Group da VM criada –> Settings –> Inbound security rules –> add.

Criei o endpoint TCP para a porta 2376, default do Docker.

Por fim, basta testar se a conexão com o Docker Host está funcionando, utilizando o comando a seguir pela máquina cliente:

Ex.: $ docker --tls --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://host.southcentralus.cloudapp.azure.com:2376 info

Para validar a versão:

Ex.: docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=host.southcentralus.cloudapp.azure.com:2376 version

São apresentadas as informações do Docker Host pronto para ser utilizado.

Governance und Compliance mit dem neuen SharePoint 2016 – Richtlinien für das Löschen von Inhalten

MSDN Blogs - Thu, 04/21/2016 - 13:44

Im dritten Beitrag zu Governance und Compliance für SharePoint 2016 wollen wir uns nun Aufbewahrungsregeln für SharePoint-Inhalte genauer anschauen. Warum ist das relevant? Dafür habe ich zwei Erklärungsansätze:

  1. Nutzerakzeptanz
    Veraltete, nicht mehr aktuelle Dateien tauchen wieder und wieder in den Suchergebnissen von SharePoint auf, obwohl sie die Nutzer nur verwirren. Spätestens, wenn man mindestens auf die Suchergenisseite zwei und drei klicken muss, um endlich das gesuchte Dokument zu finden, hört der Spaß und damit die Nutzerakzeptanz auf. Und das ist kritisch für eine Kollaborationsplattform, da Mitarbeiter sonst erfinderisch werden und andere Wege finden, um Informationen aufzubewahren und zu teilen. An diesem Punkt können wir weiter in datenschutzrechtliche Themen geraten, also kommen wir zu Erklärungsansatz zwei.
  2. Rechtssicherheit
    Wenn Mitarbeiter beispielsweise eine veraltete Vorlage für offizielle Verträge mit externen Mitarbeitern verwenden, dann können daraus Schwierigkeiten entstehen. Dies kann oft nur eine Kleinigkeit sein. Aber welchen Umfang dies in einem Rechtsstreit oder einem Image-Verlust bedeutet, ist selten abzusehen.

Wir erkennen also, dass dieses Thema wichtig ist. Grundsätzlich neu ist der Ansatz mit Aufbewahrungsregeln jedoch nicht. Wir kennen bereites Richtlinien für Dateitypen, Seitenrichtlinien, In-Place Records und das Record Center selbst. Diese Ansätze verfolgen bereits ähnliche Ziele. Um aber wieder mehr Klarheit in dieses "Buzz-Word-Bingo" zu bekommen, möchte ich zunächst etwas weiter ausholen und erklären, für welchen Zweck welche Aufbewahrungsrichtlinie geeignet ist und wie sie in das Gesamtkonstrukt passen.

Records Management / In-Place Records:
Fokus:
Archivierung einzelner Dateien
Funktionsweise:
Abhängig von den gemachten Einstellungen werden die zu archivierenden Dateien entweder automatisch in ein Record Center verschoben und verschwinden damit aus SharePoint oder sie werden am aktuellen Ort archiviert und schreibgeschützt.
Anwendungsbeispiel:
Aufbewahrung und Archivierung (durch rechtliche Vorgaben) einzelner Dateien und gleichzeitig SharePoint-Inhalte aktuell halten

Richtlinien für Dateitypen (Information-Management Richtlinien)
Fokus:
Aufbewahrung/Löschung und andere Aktionen (Auditierung, Barcodes, Labels) von Dateien
Funktionsweise:
Nachdem ein Aufbewahrungsregel (Erstellt - zuletzt bearbeitet - als Record deklariert) ausgelöst wird, können folgende Aktionen mit dem jeweiligen Dokument ausgeführt werden:
- in Papierkorb verschieben
- dauerhaft Löschen
- zu einem anderem Ort verschieben
- Workflow starten
- zur nächsten Aufbewahrungsstufe springen
- als Record deklarieren
- vorherigen Entwurf löschen
- alle vorherigen Entwürfe löschen
*Hinweis: Information-Management Richtlinien werden auf Site Collection Ebene definiert und gelten dann standardmäßig für alle Inhalte dieses Bereichs. Zusätzlich können diese Richtlinien aber auch auf Listen- und Bibliothekenebene überschrieben werden, sollten für eine Bibliothek andere Regeln gelten.
Anwendungsbeispiel: Zusätzliche Automatisierung des Record Managements, aber auch Anwendung zusätzlicher Aktionen bei beispielsweise Vertragsdokumenten oder CAD-Zeichnungen, um SharePoint "sauber" zu halten und Inhalte zu strukturieren

Richtlinien für Seiten
Fokus:
Aufbewahrung/Löschung ganzer Seiten innerhalb einer Site Collection
Funktionsweise:
Wenn eine Aufbewahrungsregel für eine Seite ausgelöst wird, kann zunächst der Schreibzugriff verweigert werden, Erinnerungen an Seitenbesitzer versendet werden und die Seite auch komplett automatisch gelöscht werden
Anwendungsbeispiel:
Projektseiten mit bestimmter Laufzeit ohne Archievierungsbedarf direkt löschen, um SharePoint aktuell zu halten

Richtlinien zur Dokumentenlöschung
Fokus:
Aufbewahrung/Löschung einzelner Dokumente, aber Farm-weit für bestimmte Vorlagen
Funktionsweise:
Ähnlich wie bei den Richtlinien für Dokumententypen, fokussiert diese neue Governance-Funktion aber nur auf die Aufbewahrung/Löschung einzelner Dokumente, dies jedoch zentral für ein oder mehrere Seitenvorlagen
Anwendungsbeispiel:
OneDrive for Business oder unstrukturierte Team-Seiten "sauber" und aktuell halten

Die Übersicht zeigt deutlich, für welchen Bereich, welche Richtlinien wirken. Nutzen Sie also diese Möglichkeiten, um den SharePoint zu verwalten und obigen zwei Problemen zu begegnen. Der zusätzliche Vorteil an den Richtlinien ist die zentrale Verwaltung. Das gilt insbesondere für die neuen Richtlinien in SharePoint 2016.
Beispiel: Sollten sich für Ihr Unternehmen die Aufbewahrungsregeln von veralteten Datein ändern, müssen Sie dies nur einmal tun und es wird automatisch dort angepasst, wo eine entsprechende Vorlage verwendet wurde.

Der Nachteil jedoch an so vielen verschiedenen Richtlinien ist, dass sie sich gegenseitig überschreiben können. Schauen Sie also genau hin, welche Richtlinie welche Aufbewahrungsregel beinhaltet.

Im folgenden möchte ich nun zeigen, welche Schritte für die neuen Dokumenten-Aufbewahrungsregeln in SharePoint 2016 nötig sind.

Voraussetzungen:
a) Search Service Application
b) Beispieldateien, die wir x Tage nicht bearbeiten
c) Crawl der entsprechenden Bereiche, wo die obigen Dateien liegen
d) Site Collection mit der Compliance Policy Center Vorlage

Diese Punkte haben wir schon in den beiden vorherigen Beiträgen besprochen. Auch der Prozess der Erstellung und Zuweisung zu existierenden Seiten oder sogar Seiten-Vorlagen und OneDrive for Business funktioniert ähnlich wie mit den DLP Regeln im Compliance Center. Dies schauen wir uns aber nachfolgend in den Screenshots an.

Anlegen einer Aufbewahrungsregel

Im Compliance Policy Center, dass wir im letzten Beitrag erstellt haben, wählen wir dieses mal die erste Option, nämlich die Richtlinien für das Löschen von Inhalten.

Simultan zum Compliance Management müssen wir auch hier zunächst die Aufbewahrungsrichtlinien definieren, bevor wir sie einer Vorlage oder einer Site Collection zuweisen können.

Beim Anlegen vergeben wir der Richtlinie einen aussagekräftigen Namen, um sie später eindeutig wiederfinden zu können. Dieser Richtlinie fügen wir anschließend einzelne Regeln hinzu. Diese erhalten ebenso einen Namen.

Bei den Aktionen kann ich wählen zwischen dem Löschen in den Papierkorb oder dem sofortigen Löschen. Als Auslöser für diese Aktionen können das Datum der Dokumenterstellung oder der letzten Änderung gewählt werden sowie die dazugehörige Ablaufzeit.

Wichtig ist hierbei noch die kleine Checkbox, ob die Regel als Standard definiert werden soll. Innerhalb einer Richtlinie kann logischer Weise immer nur eine Regel als Standard definiert werden. Was es mit dieser Standard-Definition auf sich hat, erkläre ich weiter unten.

So sieht dann das Ergebnis aus, wenn ich einer Richtlinie mehrere Regeln (im Screenshot sind es drei) zugewiesen habe. Danach nur noch abspeichern und bei Bedarf für weitere Regelkombinationen wiederholen.

Die Zuweisung von Richtlinien auf eine Vorlage oder eine bestimmte Site Collection ist identisch. Die Screenshots zeigen den Weg für die Anwendung auf eine Seitenvorlage. Dies ist ebenso analog wie zu den Compliance Richtlinien, das heißt, ich kann nur eine einzige Vorlage oder Site Collection auf einmal auswählen.

Aber bei der Auswahl der zu wählenden Richtlinien kann ich nun mehrere auf einmal zuweisen. Ebenso kann ausgewählt werden, welche dieser Richtlinien als Standard definiert werden sollen.

Was bedeuten nun diese Standards? Die Standardregel einer Standardrichtlinie wird automatisch auf eine Site Collection oder entsprechende Seitenvorlage angewendet. Der Seitenbesitzer, kann dies aber nachträglich ändern und sich für seine Seite für eine andere Richtlinie entscheiden. Daher ist es wichtig zu wissen, dass in flexiblen SharePoint-Infrastrukturen auch mehrere Richtlinien und Regeln einer Seitenvorlage zugeordnet werden sollten. Möchte ich als Administrator nur eine Richtlinie pro Vorlage zulassen, dann ist dies natürlich auch möglich. Zusätzlich kann ich das Konstrukt sogar als Pflichtrichtlinie definieren, sodass die entsprechende Regel auch ganz sicher durchgesetzt wird und die Seitenbesitzer nicht die Gelegenheit bekommen, eine Richtlinie abzuwählen.

Sobald eine Richtline zugewiesen wurde, kann es bis zu 24 Stunden dauern, bis diese aktiv wird. Auch erst dann erscheint in den Seiteneinstellungen ein zusätzlicher Link, hinter dem Seitenbesitzer die Richtlinieneinstellungen ändern könnten (wenn sie wollen und dürfen).

Alles in allem gefällt mir diese Funktionalität sehr gut. Jedoch sollte man genau darüber nachdenken, ob man Inhalte automatisch löschen lassen möchte. Obwohl ich ein Freund eines sauberen und strukturierten SharePoints bin, so ist eine permanent gelöschte Datei auch wirklich weg. Überlegen Sie daher genau, welche Richtlinie in welchem Bereich für Sie Sinn macht. Sicherer sind stattdessen Archivierungslösungen mit weiteren nützlichen Regeln, die eine Wiederherstellung mit allen Metadaten ermöglichen können. Solche Lösungen haben Drittanbieter, wie z.B. AvePoint, im Portfolio.

Viel Spaß beim "SharePointen"!

Popular musical Godspell up next for SPSCC Drama

SPSCC Posts & Announcements - Wed, 04/20/2016 - 12:01
*Production will run May 26-29 *Free to SPSCC students, staff, faculty

Microsoft Translator Adds Image Translation to Android

MSDN Blogs - Wed, 04/20/2016 - 06:00

Today, we are announcing several new Microsoft Translator capabilities available for Android users, including instant translation of images. With the new image translation feature in the Translator app for Android, you no longer need to type text or say foreign languages phrases out loud when you see them written on signs, menus, flyers…whatever. Instead you can translate pictures instantly from your phone, with the translation appearing in an overlay above the existing text.

This update of the Microsoft Translator app for Android also includes the new inline translation feature and additional downloadable language packs to use the app when you’re not connected to the Internet. Also available for Android, the new Hub Keyboard Preview app gives you a quicker way to translate as you type.

 

Image Translation

Using the image translation feature in our Translator app for Android, you can now translate text from your camera to get instant translations of signs and menus. You can also translate saved images such as pictures from emails, the Internet, and social media.

Image translation was added to the Microsoft Translator app for iOS in February, and has been available for the Translator apps for Windows and Windows Phone since 2010.

The new image feature is available in the following languages:

Chinese Simplified French Norwegian Chinese Traditional German Polish Czech Greek Portuguese Danish Hungarian Russian Dutch Italian Spanish English Japanese Swedish Finnish Korean Turkish

 

Inline Translation

Need a way to translate short phrases while using your Android phone? The new Inline Translation feature has got you covered. If you find a foreign language phrase you need translated, just highlight it and open up your “Other Options” (the three dots after Cut, Copy, and Share). From the list, choose “Translator” and you’ll be able to translate into any of the 50+ languages supported by Microsoft Translator.

This feature can also be used to translate text you are typing into apps, email, and text messages.

 

Downloadable Language Packs

This release adds 34 languages to the list of available downloadable language packs for use when you’re not connected to the Internet, bringing the total to 43 supported languages. These additional languages were added to the Translator app for iOS earlier this month, and are now available for Android users as well.

The downloadable language packs use Deep Neural Networks, also known as Deep Learning, a state-of-the-art machine learning technology that are able to deliver online-quality translations without an internet connection. This Deep Neural Network technology provides the highest-quality offline translation available on the market.

Downloadable language packs are now available in all of the following languages. Up to date language lists are always available at www.microsoft.com/translator/languages.aspx.

Arabic Greek Romanian Bosnian Hebrew Russian Bulgarian Hindi Serbian Catalan Hungarian Slovak Chinese Simplified Indonesian Slovenian Chinese Traditional Italian Spanish Croatian Japanese Swedish Czech Korean Thai Danish Latvian Turkish Dutch Lithuanian Ukrainian Estonian Malay Urdu Filipino Norwegian Vietnamese Finnish Persian Welsh French Polish   German Portuguese  

 

Download
Translator
for Android

 

Hub Keyboard Preview App

If you’re looking for an even quicker way to translate text as you’re typing, check out the new Hub Keyboard. The keyboard replaces your phone’s default keyboard to let you translate instantly while you type text messages or within other apps. No need to copy and paste from Translator, or even to highlight the text.

After you’ve clicked into a text box you want to type in, just press the Translator icon, type your message in the original language, and tap the translation to enter the translation rather than the original language. The app can translate short messages into any of our supported languages.

The Hub Keyboard Preview is now available in English in Australia, Canada, India, Ireland, New Zealand, Philippines, Singapore, the United Kingdom and the United States.





Download
Hub Keyboard
Preview




More Apps:

sp_spaceused

MSDN Blogs - Tue, 04/19/2016 - 05:00

Continuando a série dos comandos históricos, vou apresentar o comando sp_spaceused. Embora esse seja um comando antigo, essa é uma das procedures que mais uso no dia a dia.

Nos posts anteriores comentei sobre a importância do SET STATISTICS IO e do uso correto do DBCC DROPCLEANBUFFERS. Comentei sobre o DBCC SHOWCONTIG para visualizar a fragmentação e o famoso DBCC PAGE em ação. É uma saga de otimização ao contrário!

Nesse post vamos fazer uma mágica! Sim, vou mostrar uma query que é um tanto lenta… talvez você a conheça:

SELECT * FROM produtos WHERE id = 1234

Dessa vez ela conseguiu bater o recorde de lentidão e sem uma explicação aparente! E cuidado porque essa “mágica” pode estar ocorrendo no seu ambiente SQL.

Hora do Show!

Eu tenho uma tabela vazia chamada “produtos”. Se você leu os artigos anteriores, então deve conhecer bem. Ela é simples, tem dois campos e nenhum índice.

Para garantir que não há registro na tabela, vou rodar o comando DELETE sem nenhuma condição WHERE. Isso é para garantir que qualquer informação seja eliminada antes de começar o truque.

Deixo mostrar que a tabela está completamente vazia (saída no modo texto):

Vou inserir um único registro e vou colocar um nome aleatório baseado na função NEWID.

Preparem-se para o grande momento! Vamos limpar a memória usando o DBCC DROPCLEANBUFFER…

E rodamos a consulta!

A consulta de uma tabela com um único registro demorou 3 segundos. Vou repetir essa última execução com a saída dos resultados do SET STATISTICS TIME E SET STATISTICS IO.

Mas eu juro que a tabela só tem um registro!

 

Revelando o Truque

A parte principal da mágica é a preparação da tabela “produtos”, pois é ela quem causa o alto tempo de execução.

Passo 1: Criar a tabela “produtos” – Criamos uma tabela usando os campos [id] e [nome]. Usamos o tipo CHAR para aumentar o número de páginas da tabela sem precisar adicionar uma quantidade muito grande de registros. Entretanto, qualquer tipo de dado poderia ser usado. A única restrição é não criar índices ou colunas com chaves primárias.

Nesse primeiro momento, a tabela está realmente vazia:

 

Passo 2: Populamos a tabela com registros – O número de registros não é importante. A tabela deve ocupar um grande número de páginas em disco. A forma mais rápida de popular uma tabela é usando INSERT SELECT, que insere um número exponencial de registros.

Ao final do passo 2, a tabela estará ocupando 30MB. Se você quiser criar impacto, pode continuar adicionando registros até chegar na casa dos GB.

 

Passo 3. O grande segredo é apagar registros sem desalocá-los – Nas estruturas Heap, existem algumas condições necessárias para que as páginas sejam desalocadas durante o processo de remoção de registro. Isso significa que os registros serão apagados, mas a tabela continua ocupando espaço.

O espaço em disco é desalocado nas seguintes condições:

  1. Truncate Table
  2. DELETE WITH (TABLOCK)
  3. DELETE com Lock Escalation para TABLOCK
  4. ALTER TABLE … REBUILD
  5. CREATE CLUSTERED INDEX

Podemos apagar os registros usando DELETE TOP(n) WITH (PAGLOCK).

Dessa forma, evitamos a possibilidade de ocorrer um Lock Escalation durante a remoção de registros.

No final, nossa tabela está pronta! Possui 30MB de espaço alocado e nenhum registro.

Passo 4: Preparativos finais – Podemos deixar o efeito mais visível com as seguintes ações:

  • Habilitar o Trace Flag Global 652 para desligar as operações de read-ahead
  • Limpeza da Buffer Pool usando o CHECKPOINT + DBCC DROPCLEANBUFFERS

Como a tabela não possui registro, então podemos realizar operações de DELETE sem o risco de Lock Escalation. Pronto!

 

Conclusão

Esse é um problema muito comum das HEAPS e o diagnóstico não é trivial. Muitas pessoas realizam a desfragmentação de índice, mas não incluem rotinas para desfragmentar tabelas sem índice clustered. Como recomendação geral, todas as tabelas deveriam ter índice clustered.

No próximo post, vou falar sobre a estrutude do índice.

Being Human in the Digital Age - Lecture at Glasgow School of Art

MSDN Blogs - Tue, 04/19/2016 - 01:26

Lecture about being human in the digital age. Unless where stated and licensed, all words, images and photography @ Roy Sharples 2016. All rights reserved.

Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016

MSDN Blogs - Mon, 04/18/2016 - 18:46

Getting your custom components to support in the multi-version support of SSDT 2015

 

We recently released the multi-version support (also known as One Designer) in SSDT 2015, which allows SSIS developers to author, execute, deploy and debug multiple versions of SSIS package from a single version of SSDT designer. With the latest SSDT 2015, SSIS developers can switch the “Target Server Version” property to specify the version of which SSIS package is executed and deployed on. Today, we will show you how to get your custom extensions to be supported by the multi-version support in SSDT 2015.

 

Having your assemblies in the appropriate folder

First, you need to make sure you build your custom components for each supported versions of SSIS (e.g. SSIS 2012 components, SSIS 2014 components).  For each version, you also need to make sure your custom components assemblies references to the correct version of the SSIS assemblies (e.g. Your SSIS 2012 custom component should only reference to the SSIS 2012 Microsoft.SqlServer.ManagedDTS.dll). Then you need to put your extension assemblies in task version folder as well as GAC. For example:

-          For SSIS 2012 custom tasks, you need to put in the use %programfiles(x86)%\Microsoft SQL Server\110\DTS\Tasks folder.

-          For SSIS 2014 custom components, you need to put in the %programfiles(x86)%\Microsoft SQL Server\120\DTS\Tasks folder

-          For SSIS 2016 custom components, you need to put in the %programfiles(x86)%\Microsoft SQL Server\130\DTS\Tasks folder

 

Adding extension map file for SSIS 2014 and 2016

Starting from SSIS 2014, custom component developers are required to set an “alias” for each extension. The mapping between the alias and the extension is called “extension mapping”. In %programfiles(x86)%\Microsoft SQL Server\{version}\DTS\UpgradeMappings folder, you can find an “extension.xml” file, which contains all extension mapping for all extensions in the product. You also need to add a new extension map file for your extensions. Below is an example of the extension mapping:

 

<?xml version="1.0" encoding="utf-8"?>
<Extensions xmlns="http://www.microsoft.com/SqlServer/Dts/Extensions.xsd">
<PipelineComponents>
    <PipelineComponent Identifier="Martin.MultiHash" Model=".NET">
     <CreationName>Martin.SQLServer.Dts.MultipleHash, MultipleHash2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=51c551904274ab44</CreationName>
     <TypeConverter name="MultipleThreads">Martin.SQLServer.Dts.MultipleHash+MultipleThread, MultipleHash2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=51c551904274ab44</TypeConverter>
     <TypeConverter name="SafeNullHandling">Martin.SQLServer.Dts.MultipleHash+SafeNullHandling, MultipleHash2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=51c551904274ab44</TypeConverter>
     <TypeConverter name="IncludeMillsecond">Martin.SQLServer.Dts.MultipleHash+MillisecondHandling, MultipleHash2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=51c551904274ab44</TypeConverter>
    </PipelineComponent>
</PipelineComponents>
</Extensions>

 

Once you have updated the extension mapping file and ensured all the custom component assemblies in the appropriate folder, your custom component can now work with the new multi-version support of SSDT 2015!

 

 

Find reboot not suppressed deployments for a client

MSDN Blogs - Fri, 04/15/2016 - 08:15

 

To identify which deployments has been created for a client but reboot not suppressed you can query Configuration Manager DB with below SQL query;

 

======================================================================

Select * from v_CIAssignment

where CollectionID in (

select v_FullCollectionMembership.CollectionID As 'Collection ID' from v_FullCollectionMembership

JOIN v_R_System on v_FullCollectionMembership.ResourceID = v_R_System.ResourceID

JOIN v_Collection on v_FullCollectionMembership.CollectionID = v_Collection.CollectionID

Where v_R_System.Name0='2012R2CAS'

)

order by SuppressReboot desc

======================================================================

 

Suppress reboot codes means ;

 

0 = No Suppress

1= Suppressed for Workstations

2= Suppressed for Servers

3= Suppressed for all clients

 

Please be aware making changes on Configuration Manager Database manually makes your environment not supported by Microsoft.

 

Ozan YILMAZ

Premiere Support Engineer

MSFT

Master Data Services 2016 Performance Enhancements

MSDN Blogs - Fri, 04/15/2016 - 06:49

MDS 2016 includes many improvements to performance and capacity. This document shares some early performance test results that compare MDS 2014 with pre-release MDS 2016.

 

The tests were run on an Azure GS3 Virtual Machine (8 cores, 112 GB memory, 1 TB premium storage). The test data consists of a model with 7 entities and 2 versions. The largest entity contains 7 million members and 18 attributes, 6 of which are domain-based.

 

 

MDS 2014 SP1

MDS 2016 (pre-release)

Operation

Time

Time

Versus MDS 2014

Copy version

1:01:25.0

0:29:17.0

210%

 

 

 

 

Metadata operations

 

 

 

Get model details

0:00:02.9

0:00:00.6

483%

Create entity with 7 attributes

0:00:03.3

0:00:01.2

275%

Create entity with 200 attributes

0:01:02.2

0:00:02.1

2,962%

 

 

 

 

Master data operations (using Excel add-in)

 

 

 

Load 1,000 members (using filter)

0:00:01.1

0:00:00.5

220%

Load 50,000 members (using filter)

0:00:11.7

0:00:06.5

180%

Create 1,000 members

0:00:05.2

0:00:03.0

173%

Create 50,000 members

0:03:49.9

0:02:07.1

180%

Update 1,000 members

0:00:05.9

0:00:03.5

169%

Update 50,000 members

0:03:45.1

0:02:21.0

160%

Delete 1,000 members

0:00:02.7

0:00:00.6

450%

 

 

 

 

Model deployment operations

 

 

 

Create Package

N/A (30+ hours)

0:35:19.0

 

Deploy Package (Update)

N/A

5:12:40.0

 

Deploy Package (Clone)

N/A

4:19:02.0

 

 

MDS 2014 could not complete the model deployment tests because the data set was too large for it to handle. The Create Package operation did not complete after running for more than 30 hours.

 

The release-to-market (RTM) version of MDS 2016 includes even more performance improvements. Stay tuned for details!

Pages

Subscribe to Randy Riness @ SPSCC aggregator
Drupal 7 Appliance - Powered by TurnKey Linux