Моделирование неструктурированных табличных данных в базе данных - PullRequest
2 голосов
/ 12 апреля 2019

У меня есть данные в следующем формате:

enter image description here

Сетка может содержать до миллиона строк и около 10 тыс. Столбцов.Кроме того, может быть тысячи таких документов.Я думаю, что лучший способ смоделировать эти данные - использовать подход, подобный Excel, который, используя XML, дает что-то вроде следующего:

<sheetData>
    <row r="1" spans="1:4" x14ac:dyDescent="0.2">
        <c r="A1" s="1" t="s">
            <v>0</v> <!-- Means Value of type String (t="s") at 
                          A1 with value found at index 0 in 
                          a sharedStrings reference document -->
        </c>
        <c r="B1" s="1"/>  <!-- Means no data at cell B1 -->
        <c r="C1" s="1"/>  <!-- Means no data at cell C1 -->
        <c r="D1" s="1"/>  <!-- Means no data at cell D1 -->
    </row>
    <row r="2" spans="1:4" x14ac:dyDescent="0.2">
        <c r="A2" s="1"/>
        <c r="B2" s="1" t="s">
            <v>1</v>
        </c>
        <c r="C2" s="1"/>
        <c r="D2" s="1"/>
    </row>
    <row r="3" spans="1:4" x14ac:dyDescent="0.2">
        <c r="A3" s="1"/>
        <c r="B3" s="1"/>
        <c r="C3" s="1" t="s">
            <v>2</v>
        </c>
        <c r="D3" s="1"/>
    </row>
    <row r="4" spans="1:4" x14ac:dyDescent="0.2">
        <c r="A4" s="1"/>
        <c r="B4" s="1"/>
        <c r="C4" s="1"/>
        <c r="D4" s="1" t="s">
            <v>3</v>
        </c>
    </row>
</sheetData>

Значение в xml Excel является ссылкой наФайл sharedStrings, поэтому что-то вроде <v>1</v> может ссылаться на строку «Данные».

Наиболее распространенные операции, которые мне нужно разрешить для этих данных:

  • Редактирование ячейки
  • Перемещение / вставка / удаление столбца
  • Перемещение / вставка / удаление строки

Я знаком с моделью данных EAV для электронных таблиц, но для приведенного выше,неструктурированные данные, я не уверен, лучший подход для этого.Я полагаю, что MongoDB может быть «наиболее похожим» на xml-хранилище в том смысле, что это json-хранилище, но что может быть хорошим способом сохранить эти данные?

Еще одна возможность, о которой я думал, это сохранить ее в реляционной базе данных, такой как:

- spreadsheet_id
- row
- col
- value

Однако это становится практически невозможным при рассмотрении редактирования документа, если мы разрешаем операциинапример, «Вставить новую строку в позиции 0», что буквально потребовало бы обновления каждого отдельного значения (может быть миллиарда) для этой таблицы, просто чтобы вставить одну строку.

Что может быть хорошим способомхранить это?Если кто-нибудь знает, как Google Sheets хранит их данные?

...