1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/475660-SpringBoot2NoSQL

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Конкретный код не приводится.

Также представлен контроллер Redisson:

xy.SpringBoot2NoSQL.controller.Redis.RedissonController

RedissonController демонстрирует синхронизацию, асинхронность, операции, а также распределённые коллекции (хеш, мульти-хеш, набор, сортированный набор, очередь), локальное кэширование, объектный сегмент Object Bucket, двоичный поток Binary Stream, атомарные типы, публикацию и подписку, HyperLogLog для распределённого подсчёта, счётчик, события истечения срока действия, распределённую блокировку, асинхронные пакетные операции и т. д.

Например, операция локального кэширования:

@RequestMapping("/getLocalCachedMap/{name}/{key}")
public String getLocalCachedMap(@PathVariable("name") String name,@PathVariable("key") String key){
    
    LocalCachedMapOptions<Object, Object> options = LocalCachedMapOptions.defaults()
            .evictionPolicy(LocalCachedMapOptions.EvictionPolicy.LFU)
            .cacheSize(100)
            .syncStrategy(LocalCachedMapOptions.SyncStrategy.UPDATE) //синхронизация кэша
            .timeToLive(10, TimeUnit.SECONDS)
            .maxIdle(10, TimeUnit.SECONDS);
    
    RLocalCachedMap<Object, Object> map = redisson.getLocalCachedMap(name,options);     
    map.put(key, "тестирование значения");
    String result = (String)map.get(key);
    return result;
}

Эффект выполнения

Операция с объектом-сегментом:

Пакетная операция:

Ограниченная блокирующая очередь:

Более подробное введение

В процессе написания...

Ehcache для SpringBoot разработки

Конфигурация application.properties:

ehcache

spring.cache.type=ehcache spring.cache.ehcache.config=classpath:ehcache.xml

Ehcache.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false"
         >
    <diskStore path="myCache.ehcache"/>
    <defaultCache
            eternal="true"
            maxElementsInMemory="1000"
            overflowToDisk="true"
            diskPersistent="true"
            timeToIdleSeconds="0"
            timeToLiveSeconds="600"
            memoryStoreEvictionPolicy="LRU" />
 
    <!-- 这里的 users 缓存空间是为了下面的 demo 做准备 -->
    <!-- maxElementsInMemory :cache 中最多可以存放的元素的数量。如果放入cache中的元素超过这个数值,有两种情况:
     1、若overflowToDisk的属性值为true,会将cache中多出的元素放入磁盘文件中。
     2、若overflowToDisk的属性值为false,会根据memoryStoreEvictionPolicy的策略替换cache中原有的元素。-->
    
    <cache
            name="users"
            eternal="true"
            maxElementsInMemory="1000"
            overflowToDisk="true"
            diskPersistent="true"
            timeToIdleSeconds="0"
            timeToLiveSeconds="300"
            memoryStoreEvictionPolicy="LRU" />
</ehcache>

Модель Model:

См. xy.SpringBoot2NoSQL.model.User Это полностью простой POJO java класс. Используется имя пользователя (login) в качестве ключевого поля.

public class User implements Serializable{

    private String login;       
    private String fullName;
    ...

Сервис данных Service:

См. xy.SpringBoot2NoSQL.service.Ehcache.UserService

Демонстрирует простоту и отсутствие repository. Метод getUser() демонстрирует различные ситуации, когда кэш существует в куче JVM, вне кучи и на диске с сохранением.

Контроллер controller:

См. xy.SpringBoot2NoSQL.controller.Ehcache.EhcacheDataController

Эффект выполнения

Выполнение операций контроллера:

Сохранение на локальном диске:

Более подробное введение

В процессе написания...

MongoDB для SpringBoot разработки

Конфигурация application.properties:

# MONGODB 
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.database=test

Модель Model:

См. xy.SpringBoot2NoSQL.model.Mongo.Person

@Document 
public class Person {
    @Id
    private String id;
    private String name;
    private Integer age;
    @Field("locs")
    private Collection<Location> locations =  new LinkedHashSet<Location>();
    @DBRef **Поведение, связанное с хранением данных в Elasticsearch, называется индексированием (indexing).** Однако перед тем как данные будут проиндексированы, необходимо определить, где именно они должны храниться.

В Elasticsearch документы относятся к определённому типу (type), например, Classname (book). Эти типы существуют внутри индекса (index). Можно провести простую аналогию с традиционной реляционной базой данных:

  • Реляционная БД → Базы данных → Таблицы → Строки → Столбцы
  • Elasticsearch → Индексы → Типы → Документы → Поля

Кластер Elasticsearch может содержать несколько индексов (indices) — баз данных, каждый из которых может включать множество типов (types) — таблиц, а каждый тип содержит множество документов (documents) — строк. Каждый документ содержит несколько полей (Fields) — столбцов, таких как name, age и т. д. Все поля документа индексируются, то есть имеют обратный индекс, только тогда они становятся доступными для поиска. Обратите внимание: в традиционных базах данных для конкретного столбца создаётся отдельный индекс, обычно с использованием B-Tree. Elasticsearch и Lucene используют структуру данных, называемую обратным индексом (inverted index).

Репозиторий данных (Data Layer Repository):

См. xy.SpringBoot2NoSQL.repository.ElasticSearch.SampleProductRepository.

public interface SampleProductRepository extends ElasticsearchRepository<Product,String> {
    List<Product> findByName(String name);
    List<Product> findByDescription(String description);
    List<Product> findByName(String name, Pageable pageable);
    List<Product> findByNameAndId(String name, String id);
}

С помощью наследования от ElasticsearchRepository можно выполнять основные операции CRUD и разбиение на страницы. ElasticsearchRepository наследуется от ElasticsearchCrudRepository, который, в свою очередь, расширяет PagingAndSortingRepository.

Также можно использовать ElasticSearchTemplate. ElasticSearchTemplate дополняет ESRepository и предоставляет более низкоуровневые методы, особенно связанные с запросами. Например, часто требуется вставлять большие объёмы тестовых данных в Elasticsearch для тестирования поиска. Вставлять данные по одному непрактично, поэтому ES предоставляет функцию bulk для массовой вставки. Метод JPA save также поддерживает массовую вставку (save(List)), но подходит только для небольших объёмов данных. Для вставки больших объёмов данных следует использовать функцию bulk, предоставляемую ES.

ElasticSearchTemplate также предоставляет соответствующие методы.

Контроллер (Controller):

Используется для операций CRUD:

xy.SpringBoot2NoSQL.controller.ElasticSearch.ESDataController.

Для операций запроса:

xy.SpringBoot2NoSearch.controller.ElasticSearch.ESSearchController.

Различия между matchQuery, fuzzyQuery, termsQuery и другими видами запросов можно увидеть здесь:

public Page<Product> searchProduct(@PathVariable String key,@PathVariable String value, @PathVariable String searchtype) {
    Page<Product> products = null;
    
    if (searchtype.equals("matchQuery")) {
        products = sampleProductRepository.search(ESSearchUtil.matchQuery(key, value), PageRequest.of(0, 5));
    }
    
    if (searchtype.equals("matchPhraseQuery")) {
        products = sampleProductRepository.search(ESSarchUtil.matchPhraseQuery(key, value), PageRequest.of(0, 5));
    }               
    
    if (searchtype.equals("fuzzyQuery")) {
        products = sampleProductRepository.search(ESSearchUtil.fuzzyQuery(key, value), PageRequest.of(0, 5));
    }
    
    if (searchtype.equals("termsQuery")) {
        products = sampleProductRepository.search(ESSearchUtil.termsQuery(key, value), PageRequest.of(0, 5));
    }
                
    return products;
}```

Комбинированный запрос:

```public QueryBuilder getBoolQuery() {

    return QueryBuilders.boolQuery()
            .must(QueryBuilders.matchPhraseQuery("name", "测试产品1"))
            //.mustNot(QueryBuilders.termQuery("enabled", true));
            .must(QueryBuilders.matchPhraseQuery("enabled", true));
}```

**Более подробное введение:**

Работа над введением продолжается...

## Введение в Cassandra for SpringBoot

**Содержание:**
- Конфигурация SpringBoot, контроллеры, Repository Crud;
- Перед использованием необходимо создать таблицы. Скрипт создания таблиц находится в «скриптах» > «Cassandra» > «скрипт создания базы данных».
- Обратите внимание: если вы используете версию Win64 DataStax-DDC версии 3.9, после установки служба не запустится. Необходимо изменить файл конфигурации, добавив строку cdc_raw_directory со значением, аналогичным следующему: cdc_raw_directory: «ваш каталог cdcraw». Если используется версия 2.X, этой проблемы не возникает.
- Обратите внимание: перед запуском SpringBoot необходимо запустить службу Cassandra.

**Конфигурация:**
cassandra.properties

```#cassandra.properties
cassandra.contactpoints=127.0.0.1
cassandra.port=9042
cassandra.keyspace=mydb```

Класс CassandraConfig:

```@Configuration
@PropertySource(value = { "classpath:cassandra.properties" })
@EnableCassandraRepositories(basePackages = "xy.SpringBoot2NoSQL.repository.Cassandra")
public class CassandraConfig extends AbstractCassandraConfiguration {
    @Autowired
    private Environment environment;
    
    @Override
    protected String getKeyspaceName() {
        return environment.getProperty("cassandra.keyspace");
    }
    
    @Override
    @Bean
    public CassandraClusterFactoryBean cluster() {
        ...     
    }```

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

All in one — одностановочное учебное пособие по изучению SpringBoot для NoSQL. Включает в себя руководство по разработке с использованием SpringBoot 2.0, Redis, Ehcache, MongoDB, ElasticSearch, Cassandra, CouchBase, Solr, Neo4j и Gemfire — всего 10 видов распространённых инструментов для работы с NoSQL базами данных, а также демонстрационный код. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/475660-SpringBoot2NoSQL.git
git@api.gitlife.ru:oschina-mirror/475660-SpringBoot2NoSQL.git
oschina-mirror
475660-SpringBoot2NoSQL
475660-SpringBoot2NoSQL
master