2014-12-24 4 views
-2

Итак, это моя задача. У меня есть тонна данных в базе данных MapDB в Java. Мне нужно создать таблицу из нее и импортировать ее в документы google.Как написать массивную таблицу в java?

В таблице будет около 20 миллионов строк и 3000 столбцов, и там, где встречаются каждая строка и столбец, будет представлен массив целых значений (где некоторые массивы будут пустыми или пустыми). Итак, около 60 миллиардов массивов.

Мне нужно выполнить итерацию через БД, и каждая пара строк столбца в электронной таблице будет определяться по мере того, как я выполняю итерацию через БД.

Как это сделать? Какой формат файла я использую, или что мне делать? Благодарю.

EDIT:

У меня есть идея. Я мог бы создать новый файл MapDB, содержащий комбинацию строк и столбцов в качестве ключа и целочисленного массива в качестве значения. Было бы выйти, как что-то вроде этого:

static class RowColumn implements Serializable 
{ 
    final String row; 
    final String column; 

    public RowColumn(String r, String c) 
    { 
     row = r; 
     column = c; 
    } 
} 

public static void main(String[] args) 
{ 
    DB thedb = DBMaker.newTempFileDB().make(); 

    HTreeMap<RowColumn, Integer[]> spreadsheetMap = thedb.getHashMap("spreadsheet"); 

    //do some stuff here to iterate through last DB and get data 
    // 
    //stuff... 
} 

Теперь, как только у меня есть это, я могу итерацию через него и создать таблицу. Однако как написать таблицу в формате, который я мог бы использовать для импорта в google docs?

EDIT2:

Или я должен использовать в BTreeMap вместо потому HTreeMap может не так много пар ключ-значение?

+0

Взгляните JasperReports, это может сделать процесс проще ... или сложнее ... – MadProgrammer

+0

Как написать таблицу: начните с кучи всего возможного кода. Высечь все, что не похоже на распространение. – RobP

+0

Какая таблица имеет массивы для ячеек? И какая таблица поддерживает 60B-ячейки в листе? Даже Excel 2007 поддерживает только 16B, и это составляет 16k x 1M. – Gabe

ответ

1

Какую таблицу вы ищите? Какой формат?

Есть библиотеки, чтобы написать таблицы, как:

  1. Apache POI

  2. jXLS

  3. jOpenDocument

  4. Google API through GData

Если получившаяся таблица является большой, вам следует избегать использования таких библиотек и рассмотреть какой-то формат, такой как CSV (простой дамп БД). И если у вас есть свобода в отношении формата, я бы предложил некоторый открытый формат, например ods или xlsx.

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

Какова цель? Сделать резервную копию? Сгенерированный документ будет использоваться (открыт, обрабатываться) пользователями или приложениями?

EDIT:

Вот пример использования Apache POI писать таблицу в Microsoft открытом формате (то вы можете загрузить и работать с файлом на Google Docs)

public void method() throws IOException { 
    // your spreadsheet workbook 
    org.apache.poi.xssf.streaming.SXSSFWorkbook wb = new org.apache.poi.xssf.streaming.SXSSFWorkbook(); 
    wb.setCompressTempFiles(true);   
    org.apache.poi.xssf.streaming.SXSSFSheet sheet = (org.apache.poi.xssf.streaming.SXSSFSheet) wb.createSheet(); 
    sheet.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk 

    // here you will iterate over your collection and store what you need on the sheet 
    int rowsToWrite = 3000; 
    for (int rowIndex = 0; rowIndex < rowsToWrite; rowIndex++) { 
     int[] cellContent = null; 
     org.apache.poi.ss.usermodel.Row row = sheet.createRow(rowIndex); 
     for (int columnIndex = 0; columnIndex < 1; columnIndex++) { 
      row.createCell(columnIndex).setCellValue(Arrays.toString(cellContent)); 
     } 
    } 
    // save your workbook to some file 
    FileOutputStream out = new FileOutputStream("yourfilename.xlsx"); 
    wb.write(out); 
    out.close(); 
} 
+0

Есть пара целей. Основная цель состоит в том, что это выглядело бы круто, и видеть, что эти данные будут довольно интересными. Вторая причина - причины статистического анализа, поэтому я могу визуализировать перекрытие между различными наборами данных. Это ни в коем случае не заменит базу данных, я просто хочу видеть визуально, что происходит. – l2u7

+3

"посмотреть визуально, что происходит"? Рассматривая 60 миллиардов данных? Надеюсь, ты еще молод. –

+0

Что-то еще, что, возможно, важно отметить, что я указал на комментарий к моему сообщению. Может быть только 3000 возможных пар Row-Column и в общей сложности 20 миллионов целых чисел, разделенных между этими тремя парными рядами серии Row-Column. Остальные пары Row-Column будут пустыми. И действительно, при необходимости массивы могут быть опущены. Единственной важной частью данных является размер массивов. Поэтому вместо таблицы, содержащей массивы целых чисел, она может иметь только отдельные целые числа, которые определяют количество вхождений, которые встречаются в строке Row-Column в базе данных. – l2u7