[JAVA] Essayez de faire fonctionner la base de données de documents en utilisant X DevAPI avec MySQL Connector / J 8.0.15

Dans MySQL 8.0

Il peut également être utilisé comme base de données de documents (magasin de documents) en utilisant, j'ai donc essayé d'utiliser MySQL Connector / J dans un environnement Java (8), même s'il était tard.


【référence】


Préparation

Installez ce qui suit sur la même machine (un PC Windows ou une machine virtuelle Linux est OK).

Ensuite, enregistrez un utilisateur de test sur le serveur MySQL (Communauté) (OK depuis la ligne de commande ou depuis MySQL Workbench).

--L'utilisateur est testuser @ localhost

Enfin, créez un DB (schéma) test_db avec CREATE DATABASE etc. et vous êtes prêt à partir.

Description du code de test

↓ est un code de test pour le traitement simple des documents.

Code de test


package site.hmatsu47.DocDbTest;

import java.util.List;

import com.mysql.cj.xdevapi.Collection;
import com.mysql.cj.xdevapi.DbDoc;
import com.mysql.cj.xdevapi.DocResult;
import com.mysql.cj.xdevapi.Schema;
import com.mysql.cj.xdevapi.Session;
import com.mysql.cj.xdevapi.SessionFactory;


public class Main {

	public static void main(String args[]) {
		//Connecter au serveur
		Session session = new SessionFactory().getSession("mysqlx://localhost:33060/test_db?user=testuser&password=T35_U53r");

		//Connectez-vous à DB
		Schema db = session.getSchema("test_db");

		//collection'test_collection'Créer
		Collection col = db.createCollection("test_collection", true);

		//Ajouter un document à la collection
		col.add("{\"id\":1, \"name\":\"Sakuraba\", \"Program\":\"Java Champion\"}")
		        .execute();
		col.add("{\"id\":2, \"name\":\"bien\", \"Program\":\"Oracle ACE\"}")
		        .execute();
		col.add("{\"id\":3, \"name\":\"Sero\", \"Program\":[\"Java Champion\",\"Oracle Groundbreaker Ambassador\"]}")
		        .execute();
		col.add("{\"id\":4, \"name\":\"Tomita\", \"Program\":\"Oracle ACE Associate\"}")
		        .execute();
		col.add("{\"id\":5, \"name\":\"Mitani\", \"Program\":\"Oracle ACE\"}")
		        .execute();

		//Cela n'a rien à voir avec le sujet principal, mais je ne trouve pas Jukucho dans la base de données d'Oracle ACE, Groundbreaker et Java Champion ...

		//Ajouter un index à la colonne "id" de la collection
		col.createIndex("id_index", "{\"fields\": [{\"field\": \"$.id\", \"type\": \"INT\"}]}");

		//De la collection "Programme LIKE'%Oracle%'Rechercher et afficher
		searchProgram(col, "Oracle");

		System.out.println();

		//De la collection "Programme LIKE'%Java%'Rechercher et afficher
		searchProgram(col, "Java");

		System.out.println();

		//De la collection "id=2 "et affichage
		searchId(col, 2);

		System.out.println();

		//De la collection "id=4 "et affichage
		searchId(col, 4);

		//Supprimer la collection
		db.dropCollection("test_collection");
	}

	//Recherchez "Programme" du document cible dans la collection et affichez-le
	private static void searchProgram(Collection col, String keyword) {

		System.out.println("Search: " + keyword);
		DocResult docs = col.find("Program like :program")
		        .bind("program", "%" + keyword + "%").execute();

		//Obtenir et afficher les résultats
		List<DbDoc> docl = docs.fetchAll();
		docl.forEach(doc -> System.out.println(doc.toFormattedString()));
	}

	//Rechercher et afficher numériquement l '"id" du document cible de la collection
	private static void searchId(Collection col, long value) {

		System.out.println("Search: " + value);
		DocResult docs = col.find("id = :id")
		        .bind("id", value).execute();

		//Obtenir et afficher les résultats
		System.out.println(docs.fetchOne().toFormattedString());
	}
}

Utilisez new SessionFactory (). GetSession () pour vous connecter au serveur de base de données avec ʻURL comme argument, et utilisez session.getSchema (); `pour spécifier le nom du schéma (DB) comme argument pour se connecter à la base de données. Je suis.

Comme son nom l'indique, ʻURL est ʻURL, donc si vous utilisez un symbole dans votre mot de passe, veuillez l'échapper de manière appropriée (j'ai fait une erreur et je me suis inquiété pendant une heure).

Puis dans l'ordre

--Créez une nouvelle collection de documents (si le même nom existe déjà, utilisez-le tel quel) --Ajouter des documents à la collection de documents (5 lignes au total) --Indexage

Je fais.

Comme vous pouvez le voir, la recherche de chaîne LIKE trouve qu'un document recherche correctement même s'il a plusieurs éléments avec le même nom.

En regardant la conception de la table pendant l'exécution, cela ressemble à ceci (SHOW CREATE TABLE test_db.test_collection;)

test_conception de table de collection


CREATE TABLE `test_collection` (
  `doc` json DEFAULT NULL,
  `_id` varbinary(32) GENERATED ALWAYS AS (json_unquote(json_extract(`doc`,_utf8mb4'$._id'))) STORED NOT NULL,
  `$ix_i_C6EF652A87142734264FBA60F41C59108CF4D8CA` int(11) GENERATED ALWAYS AS (json_extract(`doc`,_utf8mb4'$.id')) VIRTUAL,
  PRIMARY KEY (`_id`),
  KEY `id_index` (`$ix_i_C6EF652A87142734264FBA60F41C59108CF4D8CA`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

De plus, le résultat de l'exécution sera comme ceci.

Résultat d'exécution


Search: Oracle
{
"Program" : "Oracle ACE",
"_id" : "00005c8ded80000000000000006b",
"id" : 2,
"name" : "bien"
}
{
"Program" : ["Java Champion", "Oracle Groundbreaker Ambassador"],
"_id" : "00005c8ded80000000000000006c",
"id" : 3,
"name" : "Sero"
}
{
"Program" : "Oracle ACE Associate",
"_id" : "00005c8ded80000000000000006d",
"id" : 4,
"name" : "Tomita"
}
{
"Program" : "Oracle ACE",
"_id" : "00005c8ded80000000000000006e",
"id" : 5,
"name" : "Mitani"
}

Search: Java
{
"Program" : "Java Champion",
"_id" : "00005c8ded80000000000000006a",
"id" : 1,
"name" : "Sakuraba"
}
{
"Program" : ["Java Champion", "Oracle Groundbreaker Ambassador"],
"_id" : "00005c8ded80000000000000006c",
"id" : 3,
"name" : "Sero"
}

Search: 2
{
"Program" : "Oracle ACE",
"_id" : "00005c8ded80000000000000006b",
"id" : 2,
"name" : "bien"
}

Search: 4
{
"Program" : "Oracle ACE Associate",
"_id" : "00005c8ded80000000000000006d",
"id" : 4,
"name" : "Tomita"
}

Autre

Autre X DevAPI

--Traitement asynchrone --Opérations telles que CRUD pour les schémas de bases de données relationnelles --Transaction en cours

Il existe plusieurs fonctions telles que.


Recommended Posts

Essayez de faire fonctionner la base de données de documents en utilisant X DevAPI avec MySQL Connector / J 8.0.15
Benching en modifiant les propriétés avec MySQL Connector / J Partie 1: Batch
Essayez d'utiliser GloVe avec Deeplearning4j
Connexion JDBC avec MySQL 8.x * Notes *
Essayez d'utiliser Redis avec Java (jar)
[Entraine toi! ] Liaison de base de données Java (Connector / J 8.0.20)
Benchmark en modifiant les propriétés avec MySQL Connector / J Partie 2: Arrêtez les conversations inutiles
Benching en modifiant les propriétés avec MySQL Connector / J Partie 3: Cache d'instructions préparé
Interagir avec une base de données MySQL à l'aide de la fonction ORM (Object-Relational Mapping) d'Apache Cayenne