Tout est là:
https://christophep.wordpress.com/2018/07/13/architecture-of-the-windows-service-lmdbservice/
Le Blog des NET Azure Rangers – Paris, Lyon, Strasbourg, Toulouse, Nantes, Belgique et EMEA.
Si vous hésitez entre les ces trois fonctions de conversion explicite de données, et leur équivalent avec TRY, vous n’êtes pas le seul!
Pour chaque fonction, il existe son équivalent qui commence par TRY_, et qui fait exactement la même conversion que la fonction sans TRY_, mais si la conversion échoue, il n’y a pas de message d’erreur – simplement, le résultat de la conversion sera NULL.
Voici des points de comparaison, pour vous aider à choisir, ou à mieux distinguer les points forts et faibles de chacune:
PARSE ( string_value AS data_type [ USING culture ] ) TRY_PARSE ( string_value AS data_type [ USING culture ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) TRY_CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
CAST ( expression AS data_type [ ( length ) ] ) TRY_CAST ( expression AS data_type [ ( length ) ] )
CONVERT et CAST existent depuis SQL Server 2008
Toutes les autres (PARSE et TRY_PARSE, TRY_CONVERT, TRY_CAST) ont été introduites dans SQL Server 2012
PARSE convertit uniquement du type string, vers les types dates ou nombres.
CAST et CONVERT convertissent de tout type vers un autre type – pourvu que la conversion soit possible!
SELECT PARSE('09/07/2018' AS DATE USING 'fr-FR') as DateFR SELECT CONVERT(DATE, '09/07/2018', 103) as DateFR SELECT CAST('07:35' as TIME) as TimeGen
PARSE: Accepte un paramètre culture, littéral (ex. ‘en-US’, ‘fr-CA’), facilement compréhensible.
Large plage de valeurs d’entrée converties avec succès – réussit des conversions sur lesquelles les deux autres fonctions échouent.
CONVERT accepte un paramètre style, numérique, pour indiquer le format souhaité en sortie. Ce paramètre est utile, mais bien plus “cryptique” que celui de PARSE.
CAST ne prend pas d’autres paramètres que la valeur a convertir, et le type cible. Il a l’avantage d’avoir une syntaxe simple.
PARSE: Convertit peu de types de données (uniquement string accepté en entrée).
CONVERT n’est pas prevue par le standard ISO, comme l’est CAST.
Pour CAST, il n’y a aucun moyen de préciser le format des données d’entrée.
PARSE est la plus coûteuse en termes de performance, car n’est pas une fonction native SQL, mais dépend du CLR .Net. Elle nécessite que le CLR se trouve sur le serveur SQL.
CONVERT et CAST sont aussi performantes l’une que l’autre.
Les équivalents avec TRY – TRY_PARSE, TRY_CONVERT et TRY_CAST – retournent NULL si la conversion échoue, plutôt que générer un message d’erreur (comme le fait leur équivalent sans TRY).
Privilégiez l’utilisation de (TRY_)CONVERT et (TRY_)CAST, pour des raisons de performance.
Références:
Article exhaustif sur les conversions de types de données
Détails sur CONVERT et CAST
La fiche de la fonction PARSE
Félicitations à Eva D. qui a obtenu le MCP 70-761 : Querying Data with Transact-SQL.
Bravo !
Je dois admettre que les aller/retour C#/LMDBDLL64.dll sont rapides… C’était ma crainte. Voir le post précédent pour obtenir les valeurs de performance.
Download de la DLL LMDB et du wrapper .NET ici.
static void Main(string[] args) { Logger.LogInfo("Main..."); //Main2() int count = 0; if (args.Length == 1) { count = Convert.ToInt32(args[0]); } string str = String.Format("count={0}", count); Logger.LogInfo(str); LightningEnvironment _env; LightningTransaction _txn; string dir = "c:\\temp\\cache_net10A"; _env = new LightningEnvironment(dir); //This is here to assert that previous issues with the way manager //classes (since removed) worked don't happen anymore. _env.MaxDatabases = 2; _env.MapSize = 10485760 * 100; _env.Open(); DateTime dtStart = DateTime.Now; var tx = _env.BeginTransaction(); var db = tx.OpenDatabase("DB", new DatabaseConfiguration { Flags = DatabaseOpenFlags.Create }); for (int i = 0; i < count; i++) { string key = String.Format("key_{0}", i); string value = String.Format("value_{0}", i); tx.Put(db, key, value); } tx.Put(db, "hello", "world"); tx.Commit(); db.Dispose(); DateTime dtStop = DateTime.Now; TimeSpan ts = dtStop - dtStart; str = String.Format("Time elapsed:{0} ms", ts.TotalMilliseconds); Logger.LogInfo(str); tx = _env.BeginTransaction(TransactionBeginFlags.ReadOnly); db = tx.OpenDatabase("DB"); var result = tx.Get(db, "hello"); Logger.LogInfo(result); tx.Dispose(); _env.Dispose(); }
With a .NET Wrapper adapted to my Win32 port of LMDB library, here are the perfs:
100.000 rows inserted in 270 ms ! Fabulous !
1.000.000 rows inserted in 3 s ! It rocks ! But I need to check because the database file is not so heavy… I need to readjust my .NET wrapper to return a code on put operation.
Après un tournoi de foot FIFA18 bien sympa, on a fêté le vainqueur ! C’est Jean-Mimi notre expert CRM (for ever) qui a gagné.
Si vous cherchez une société innovante avec des qualités humaines certaines, dans laquelle l’ambiance est bien sympa, venez chez Neos-SDI !
Contact : http://www.neos-sdi.com/recrutement
La photo a été prise par notre admin-système Jean-Remy qui va bientôt nous faire son premier article technique…
Hier soir, le meeting Juillet 2018 des .NET Rangers s’est tenu dans une ambiance calme et détendue.
On a causé Microsoft, Azure, business et bu du St Emilion Grand Cru !
Prochain meeting, Septembre 2018 avec en espérant la communauté du Grand Est avec JBB et notre MVP Cédric.
La devise des Rangers : “Rangers lead the way” => “Les Rangers ouvrent la voie”
Le serment du Ranger:
Reconizing that I volunteered as a Ranger, fully knowing the hazards of my chosen profession, I will always endeavor to uphold the prestige, honor, and high esprit de corps of my Ranger Regiment.
Acknowledging the fact that a Ranger is a more elite soldier who arrives at the cutting edge of battle by land, sea, or air, I accept the fact that as a Ranger my country expects me to move farther, faster and fight harder than any other soldier.
Never shall I fail my comrades. I will always keep myself mentally alert, physically strong and morally straight and I will shoulder more than my share of the task whatever it may be. One-hundred-percent and then some.
Gallantly will I show the world that I am a specially selected and well-trained soldier. My courtesy to superior officers, neatness of dress and care of equipment shall set the example for others to follow.
Energetically will I meet the enemies of my country. I shall defeat them on the field of battle for I am better trained and will fight with all my might. Surrender is not a Ranger word. I will never leave a fallen comrade to fall into the hands of the enemy and under no circumstances will I ever embarrass my country.
Readily will I display the intestinal fortitude required to fight on to the Ranger objective and complete the mission though I be the lone survivor.
Rangers lead the way!