Giter Club home page Giter Club logo

2021-nosql-lsm's Introduction

2021-nosql-lsm

Курсовой проект 2021 года курса "Использование баз данных" в Технополис.

Этап 1. In-memory (deadline 2021-05-12 00:00:00 MSK)

Fork

Форкните проект, склонируйте и добавьте upstream:

$ git clone [email protected]:<username>/2021-nosql-lsm.git
Cloning into '2021-nosql-lsm'...
...
$ cd 2021-nosql-lsm
$ git remote add upstream [email protected]:polis-mail-ru/2021-nosql-lsm.git
$ git fetch upstream
From github.com:polis-mail-ru/2021-nosql-lsm
 * [new branch]      master     -> upstream/master

Make

Так можно запустить тесты (ровно то, что делает CI):

$ ./gradlew test

Develop

Откройте в IDE -- IntelliJ IDEA Community Edition нам будет достаточно.

В своём Java package ru.mail.polis.lsm.<username> реализуйте интерфейс DAO, используя одну из реализаций java.util.SortedMap.

Возвращайте свою реализацию интерфейса в DAOFactory.

Продолжайте запускать тесты и исправлять ошибки, не забывая подтягивать новые тесты и фиксы из upstream. Если заметите ошибку в upstream, заводите баг и присылайте pull request ;)

Report

Когда всё будет готово, присылайте pull request в ветку stage1 со своей реализацией на review. Не забывайте отвечать на комментарии в PR и исправлять замечания!

Этап 2. Persistence (deadline 2021-05-19 00:00:00 MSK)

Update

Находясь в той ветке, где находится ваш код из Этапа 1, выполните:

$ git fetch upstream
$ git merge upstream/stage2

Make

Запускаем обновленные тесты

$ ./gradlew test

Fix

Преведите код в состояние, удовлетворяющее новым тестам. А именно: при конструировании DAO следует восстановить состояние, персистентно сохраненное в методе close. Следует иметь ввиду, что в дальнейшем в этом файле будет происходить бинарный поиск без полной загрузки в память (но на данном этапе, это можно игнорировать).

Report

Когда всё будет готово, присылайте pull request в ветку stage2 со своей реализацией на review. Не забывайте отвечать на комментарии в PR и исправлять замечания!

Этап 3. Merge Iterator (deadline 2021-05-26 00:00:00 MSK)

Update

Находясь в той ветке, где находится ваш код из Этапа 2, выполните:

$ git fetch upstream
$ git merge upstream/stage3

Make

Запускаем обновленные тесты

$ ./gradlew test

Fix

Преведите код в состояние, удовлетворяющее новым тестам. А именно: в классе DAO появился метод merge, принимающий на вход список отсортированных по возрастанию ключей итераторов. На выходе ожидается получить 1 итератор, отсортированный по возрастанию, объединяющий все итераторы из списка, но исключающий дубликаты. При нахождении дубликата требуется использовать значение из итератора с наибольшим индексом.

Пример:

Cписок итераторов с парами ключ-значение:
[
    iterator1 -> 0=a, 1=b, 2=c, 5=d;
    iterator2 -> 2=e, 3=f, 4=g, 5=h, 6=i;
    iterator3 -> 0=j, 7=k;
]

Ожидаемый результат:
iterator -> 0=j, 1=b, 2=e, 3=f, 4=g, 5=h, 6=i, 7=k

Задача осложняется тем, что содержимое всех итераторов в сумме превышает выделенный приложению объем памяти.

Report

Когда всё будет готово, присылайте pull request в ветку stage3 со своей реализацией на review. Не забывайте отвечать на комментарии в PR и исправлять замечания!

Этап 4. LSM

Update

Находясь в той ветке, где находится ваш код из Этапа 3, выполните:

$ git fetch upstream
$ git merge upstream/stage4

Make

Запускаем обновленные тесты

$ ./gradlew test

Fix

Преведите код в состояние, удовлетворяющее новым тестам. А именно: DAO должен поддерживать работу с большим количеством данных, чем помещается в памяти.

Report

Когда всё будет готово, присылайте pull request в ветку stage4 со своей реализацией на review. Не забывайте отвечать на комментарии в PR и исправлять замечания!

2021-nosql-lsm's People

Contributors

igorsamohin avatar incubos avatar kish-dev avatar lamtev avatar maxim-byte avatar ogamoga avatar ogsegu avatar sdimosik avatar step-ponomarev avatar theredpandadev avatar vadim01er avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.