Экспорт сотен тысяч записей с ColdFusion - PullRequest
4 голосов
/ 18 января 2011

Используя ColdFusion 9.0.1, мне нужно экспортировать сотни тысяч записей базы данных в Excel XLSX или CSV (предпочтительнее XLSX).Это должно быть сделано по требованию.До сих пор я пытался использовать cfspreadsheet, но он задыхается при экспорте более пары тысяч строк в формате XLSX.Тем не менее, экспорт в XLS работает нормально (конечно, существует ограничение в ~ 65 000 строк).

Какие есть варианты экспорта такого количества записей?Теоретически пользователям может понадобиться экспортировать до миллиона записей.Я также использую SQL Server 2008 R2 - есть ли способ каким-то образом экспортировать записи в файл и затем отправить файл через CF пользователю?Какие варианты у меня есть?Спасибо.

Ответы [ 3 ]

8 голосов
/ 18 января 2011

Поскольку вы используете SQL Server 2008, вы можете воспользоваться службами отчетов SQL Server (SSRS) и создать отчет, который ColdFusion может вызывать через веб-службу (или HTTP GET / POST).SSRS также имеет возможность экспортировать отчеты в формате Excel.Вам нужно будет прочитать SSRS, чтобы сделать это, но это довольно легко сделать.

4 голосов
/ 18 января 2011

Как вы обнаружили, выполнить это с тегом <cfspreadsheet/> ColdFusion не удается, поскольку он создает весь документ в памяти, что приводит к ошибкам JVM OutOfMemory. Что вам нужно, это что-то, что буферизует вывод на диск, чтобы вам не хватило памяти. Это говорит о CSV, который гораздо проще буферизовать. Я думаю, что есть способы сделать это и в Excel, но я их не знаю.

Итак, два варианта для вас:

  1. использовать библиотеку Java
  2. используйте методы ColdFusion fileOpen(), fileWrite(), fileClose()

Я покрою каждого по очереди.

Java Libary

opencsv - мои предпочтения. Это предполагает, конечно, что вы знаете, как настроить .jar на пути к классам ColdFusion. Если вы это сделаете, то это вопрос использования его API, чтобы открыть файл и указать данные для каждой строки. Это действительно довольно просто. Проверьте его документы для примеров.

ColdFusion Методы

Будьте предупреждены, здесь будут драконы .

Если вы экспортируете числа или строки, которые не содержат двойных кавычек или запятых, вы, вероятно, можете сделать это. Если нет, выясните, что нужно избегать и как, почему вы используете библиотеку в первую очередь. Код примерно такой:

<!--- query to get whatever data you're working with --->

<cfset csvFile = fileOpen(filePath, 'read')>
<cfloop query="yourQuery">
    <cfset csvRow = ""><!--- construct a csv row here from the query row --->
    <cfset fileWrite(csvFile, csvRow)>
</cfloop>

<cfset fileClose(csvFile)>

Если данные запроса, с которыми вы работаете, также велики, вы, возможно, имеете дело с вложенным циклом для его разделения.

0 голосов
/ 15 июля 2011

Дастин, мне пришлось исследовать это самостоятельно, и на момент написания этой статьи (лето 2011 г.) POI отлично справлялся с генерацией больших файлов, но вы должны использовать xlsx.Бета-версия 3.8 поставляется с примером под названием «BigGridDemo», который очень быстро генерирует 100-тысячную книгу из 4 столбцов.Я изменил его, чтобы создать 300K, 125 столбцов листа, и он обработал его примерно за 2 минуты.За чуть более получаса была создана рабочая книга объемом 1,6 ГБ объемом 3,6 млн.

Конечно, код не самый красивый, но он работает.Я подозреваю, что при переносе на ColdFusion он немного улучшится.

...