Une recherche binary peut-elle être effectuée dans une firebase database SQL?

D’ACCORD. J’utilise le langage de programmation C # pour accéder à une firebase database simple (sur Microsoft SQL Server)

Actuellement, j’utilise l’object DataReader pour accéder à la firebase database. Voici donc ma question: est-il possible de faire une recherche binary (en C #) pour une donnée particulière afin que je puisse faire la recherche plus rapidement?

Actuellement, j’utilise une simple boucle while pour rechercher le contenu de la firebase database. Je crois que cela se fait de manière séquentielle.

while (pReader.Read()) { if ((Ssortingng)pReader["theData"] == "The_thing_im_searching_for") break; } 

Alors, est-il possible de faire une recherche binary?

Si vous utilisez quand même une firebase database, vous devriez écrire une instruction select pour rechercher ce que vous cherchez plutôt que de parcourir manuellement la firebase database. Il n’y a aucune raison de réinventer la roue.

Comme le souligne Donnie, si vous exprimez votre prédicat en SQL, la firebase database sélectionnera le moyen le plus efficace d’extraire automatiquement vos données.

Essaye ça:

 ssortingng sql = "SELECT * FROM Foo WHERE theData = 'The_thing_im_searching_for'" SqlDataAdapter adapter = new SqlDataAdapter(sql); DataTable table = new DataTable(); adapter.Fill(table); foreach(DataRow row in table.Rows) { // Do whatever you want here } 

Dans l’esprit de la réponse de Donnies, j’ai fourni un exemple SQL simple sur la façon de récupérer ce que vous cherchez après en utilisant un mécanisme plus sécurisable que le SQL construit dynamicment (comme d’autres vous l’ont conseillé).

Dans le cas simple, vous devez créer une procédure stockée pour chaque opération Créer, Lire, Mettre à jour, Supprimer disponible pour l’application, par entité dans la firebase database. (Ce n’est pas vrai à 100% dans les systèmes de production de grande taille, mais c’est mieux que le SQL généré dynamicment construit dans l’application)

Maintenant, pour le READ, ceci liste tout si aucun paramètre n’est fourni. Il s’agit d’une version simplifiée d’une approche sur laquelle un architecte de firebase database a présenté ses travaux – dans ce cas, nous ne séparons pas la procédure stockée de récupération de la procédure de listage, elles constituent en réalité la même opération. Cela rapportera moins de code SQL à conserver à long terme.

 CREATE PROCEDURE usp_ReadName @name_id bigint=NULL AS BEGIN SET NOCOUNT ON; if (@name_id IS NULL) SELECT name_id,name,description from name with(nolock) else select name_id,name,description from name with(nolock) where name_id = @name_id END GO 

Passons maintenant au côté C #. Pour conserver les résultats, nous définissons une entité de transfert de données. En règle générale, ils sont plus légers qu’un datatable plus rapide et plus efficace à utiliser. Si la vitesse, de gros volumes de données ou une mémoire limitée ne sont pas une préoccupation, allez simplement avec un datatable. (En moyenne, vous économiserez plus de 40% de mémoire et environ 10% de vitesse – 100K enregistrements de la structure au-dessus des pics d’utilisation de la mémoire à 140 Mo avec un emplacement de données, tandis que l’ETTD culmine à 78 Mo)

 ///  /// A simple data transfer entity ///  public struct name_data { public long name_id; public ssortingng name; public ssortingng description; public name_data(long id, ssortingng n, ssortingng d) { name_id = id; name = n; description = d; } } 

Maintenant, nous capturons les résultats en C # en utilisant la syntaxe de paramètre nullable. Ce code suppose que vous avez déjà ouvert la connexion SQL

 conn.Open(); using (SqlCommand cmd = new SqlCommand("usp_ReadName",conn)) { cmd.CommandType = CommandType.StoredProcedure; if (id.HasValue) cmd.Parameters.Add("@name_id", SqlDbType.BigInt).Value = id.Value; using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { dte.name_data item = new dte.name_data( (long)reader["name_id"], reader["name"].ToSsortingng(), reader["description"].ToSsortingng()); items.Add(item); } } } } 

Les réponses de Daniel et Donnie vous disant que c’est une mauvaise idée sont très correctes.

Cependant, une réponse plus directe à votre question est que, oui, vous pouvez rechercher des données binarys, bien que je ne sois pas sûr que ce soit ce que vous recherchez.

MSSQL peut stocker des données au format varbinary et vous pouvez effectuer des recherches sur ces données varbinary. En fait, vous pouvez trouver plus d’informations à ce sujet dans cet article: Traitement d’un champ varbinary dans VB.NET

Voici un exemple de requête faisant exactement cela.

 byteArrayToken = SsortingngToByteArray(ssortingngToken) scSelectThing.CommandText = "select thing from table where token=@token" Dim param As SqlParameter = scSelectThing.Parameters.Add("@token", SqlDbType.VarBinary) param.Value = byteArrayToken lbOutput2.Text = scSelectThing.ExecuteScalar() 

Alors, est-il possible de faire une recherche binary?

Le problème avec une simple SELECT sur le côté SQL Server est que la firebase database effectuera une recherche linéaire dans la table, sauf si la colonne avec laquelle vous travaillez a un index. alors la firebase database peut être plus intelligente.

Si vous avez quand même besoin de lire la totalité de la table (par exemple, pour pouvoir la rechercher à nouveau plus tard), vous pouvez envisager d’utiliser ArrayList.BinarySearch() . Bien entendu, pour que cela fonctionne, les données devront être sortingées dans la liste de tableaux.

Merci pour toutes les informations (Jay Here again). Je crois avoir répondu à ma question.

Le truc, c’est que j’ai beaucoup d’informations dans la firebase database. La recherche d’un article en particulier prendrait beaucoup de temps. Donc, j’étais intéressé à faire une recherche binary.

Quand je fais une commande SELECT pour trouver quelque chose, je ne sais pas si MSSQL (au fond) fait une recherche binary. Mais si ce que dit RickNZ (ci-dessus) est vrai

Le problème avec une simple SELECT sur le côté SQL Server est que la firebase database effectuera une recherche linéaire dans la table, sauf si la colonne avec laquelle vous travaillez a un index. alors la firebase database peut être plus intelligente.

Ensuite, la firebase database effectuera la recherche de la manière la plus efficace (recherche binary) si j’avais les informations “indexées”.