Какая встроенная база данных, способная к 100 миллионам записей, имеет эффективный C или C++ API

Единственный способ создать правильно динамическую таблицу - это иметь имена столбцов, равные ключам объекта. Тогда вы можете зациклить свойства объекта по именам столбцов внутри массива данных. Вот небольшой пример.

    <table>
      <thead>
        <tr>
          <th *ngFor="let col of data.ColumnNames">{{ col }}</th>
        </tr>
      </thead>
      <tbody>
      <tr *ngFor="let row of data.Rows">
        <td *ngFor="let col of data.ColumnNames">
          {{ row.Cells[col].Data }}
        </td>
      </tr>
      </tbody>
    </table>

Конечно, вы можете усложнить имена столбцов и получить объект, например:

{
 columnName: 'Valid Date',
 dataKey: 'date_validite'
}

И цикл мысли массив таких столбцов. Это зависит от вас. Я надеюсь, что вы поймете основную идею.

20
задан Andy Dent 3 November 2014 в 06:11
поделиться

9 ответов

Вы могли бы рассмотреть C-дерево , FairCom - говорит им, что я отправил Вас ;-)

9
ответ дан 30 November 2019 в 00:32
поделиться

Вы не упоминали, какая платформа Вы идете, но если Windows только в порядке, смотрите на Расширяемый Механизм устройства хранения данных (ранее известный как Струйный Синий), встроенный механизм таблицы ISAM, включенный в Windows 2000 и позже. Это используется для Active Directory, Exchange и другие внутренние компоненты, оптимизировали для небольшого количества больших таблиц.

Это имеет интерфейс C и поддерживает двоичные типы данных исходно . Это поддерживает индексные , транзакции и использует журнал для обеспечения атомарности и длительности. Нет никакого языка запросов; необходимо работать с эти индексы таблиц и непосредственно сами.

ESE не любит открывать файлы по сети и не поддерживает совместное использование базы данных посредством совместного доступа к файлам. Вы собираетесь быть трудно нажатыми для нахождения любого механизма базы данных, который поддерживает совместное использование посредством совместного доступа к файлам. Струйный механизм базы данных Доступа (иначе Струйная Красная, полностью отдельная кодовая база) является единственным, о котором я знаю, и это известно за повреждение файлов по сети, особенно если они являются большими (> 100 МБ).

Безотносительно механизма, который Вы используете, необходимо будет, скорее всего, реализовать общие функции использования сами в собственном сетевом сервере, обрабатывают или используют дискретный механизм базы данных.

4
ответ дан 30 November 2019 в 00:32
поделиться

Я верю тому, что Вы ищете, BerkeleyDB: http://www.oracle.com/technology/products/berkeley-db/db/index.html

Не берет в голову, что это - Oracle, лицензия является бесплатной, и это - открытый исходный код - единственная выгода - то, что при перераспределении программного обеспечения, которое использует BerkeleyDB, необходимо сделать источник доступным также - или купить лицензию.

Это не обеспечивает поддержку SQL, а скорее прямые поиски (через B-дерево или структуру хеш-таблицы, какой бы ни имеет больше смысла для Ваших потребностей). Это чрезвычайно надежно, быстро, ACID, имеет встроенную поддержку репликации, и так далее.

Вот маленькая кавычка от страницы, которую я отсылаю к вышеупомянутому, который перечисляет несколько функций:

Хранение данных

Беркли DB хранит данные быстро и легко без издержек, найденных в других базах данных. DB Беркли является библиотекой C, которая работает в том же процессе как Ваше приложение, избегая задержек межпроцессного взаимодействия использования удаленного сервера базы данных. Общие кэши сохраняют самые активные данные в памяти, избегая дорогостоящего доступа к диску.

  • Локальное, незавершенное хранение данных
  • Нейтральный в отношении схемы, собственный формат данных приложения
  • Индексируемое и последовательное извлечение (B-дерево, Очередь, Recno, Хеш)
  • Несколько процессов на приложение и несколько потоков для каждого процесса
  • Мелкомодульная и настраиваемая блокировка для очень параллельных систем
  • Управление совместным выполнением мультиверсии (MVCC)
  • Поддержка вторичных индексов
  • В оперативной памяти, на диске или оба
  • уплотнение B-дерева Онлайн
  • восстановление дискового пространства B-дерева Онлайн
  • заброшенное удаление блокировки Онлайн
  • На дисковом шифровании данных (AES)
  • Записи до 4 ГБ и таблицы до 256 ТБ

Обновление: Просто натыкался на этот проект и думал о вопросе, который Вы отправили: http://tokyocabinet.sourceforge.net/index.html . Это находится под LGPL, таким образом, не совместимый с Вашими ограничениями, но интересным проектом проверить, тем не менее.

2
ответ дан 30 November 2019 в 00:32
поделиться

Одна опция могла быть Firebird. Это предлагает обоим серверный продукт, а также встроенный продукт.

Это - также открытый исходный код и существует большое количество поставщиков для всех типов языков.

2
ответ дан 30 November 2019 в 00:32
поделиться

SQLite соответствовал бы тем критериям, за исключением возможного сценария совместно используемого файла в будущем (и на самом деле это могло, вероятно, сделать это к тому, если сетевая файловая система реализует блокировки файла правильно).

1
ответ дан 30 November 2019 в 00:32
поделиться

Были упомянуты много хороших решений (таких как SQLite). Позвольте мне добавить два, так как Вы не требуете SQL:

  • HamsterDB, быстрый, простой использовать, может хранить произвольные двоичные данные. Никакое условие для общих баз данных.
  • Бойкий модуль HashTable кажется довольно интересным также и очень распространен, таким образом, Вы не рискнете входить в тупик. На другом конце я не уверен, что существует и простой способ сохранить базу данных по диску, это главным образом для материала в оперативной памяти

, я протестировал обоих на многомиллионных проектах записей.

1
ответ дан 30 November 2019 в 00:32
поделиться

SQLite имеет тенденцию быть первой опцией. Это не хранит данные как строки, но я думаю, что необходимо создать команду SQL, чтобы сделать, вставка и та команда будут иметь некоторое строковое здание.

BerkeleyDB является хорошо спроектированным продуктом, если Вам не нужен relationDB. Я понятия не имею, что Oracle взимает за него и если Вам была бы нужна лицензия на Ваше приложение.

Лично я рассмотрел бы, почему у Вас есть некоторые Ваши требования. Вы сделали тестирование для проверки требования, чтобы Вы сделали прямую вставку в базу данных? Кажется, что Вы могли занять несколько часов для описывания обертки, которая преобразовывает из любого API, который Вы хотите к SQL и затем видите, отвечают ли SQLite, MySql... Вашим требованиям скорости.

0
ответ дан 30 November 2019 в 00:32
поделиться

Поскольку вы знакомы с Fairtree, то вы, вероятно, также знакомы с Raima RDM.

Он стал открытым исходным кодом несколько лет назад, затем dbstar заявили, что они каким-то образом приобрели авторские права. Хотя это кажется спорным. Судя по оригинальной лицензии Raima, это кажется невозможным. Конечно, можно остаться с исходной версией кода. Это довольно редко, но у меня есть копия.

1
ответ дан 30 November 2019 в 00:32
поделиться

Раньше был продукт под названием b-trieve, но я не уверен, был ли включен исходный код. Думаю, его сняли с производства. Единственный известный мне движок базы данных с ориентацией на ISAM - это c-tree.

0
ответ дан 30 November 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: