Thank Ken, your suggestion solved my problem with the OOM exception.

I tried your suggestion to run it in parallel but I didn't see much
difference. Instead I called future on the let call and that helped
the performance.

On Dec 17, 2:55 pm, Ken Wesson <kwess...@gmail.com> wrote:
> On Fri, Dec 17, 2010 at 5:39 PM, clj123 <ariela2...@gmail.com> wrote:
> > (defn persist-rows
> >  [headers rows id]
> >  (let [mrows (transform-rows rows id)]
> >    (with-db *db* (try
> >         (apply insert-into-table
> >                :my-table
> >                [:col1 :col2 :col3]
> >                mrows)))
> >     nil ))
>
> > (defn filter-data
> >  [rows item-id header id]
> >   (persist-rows
> >      header
> >      (filter #(= (:item_id %) item-id) rows)
> >      id))
>
> > (dorun (pmap #(filter-data rows %1 header %2)
> >             items id ))
>
> Rows gets traversed repeatedly, for each item/id pair. So the head
> gets held onto.
>
> To make this scale you're going to need to regenerate the rows seq for
> each traversal; you need something like
>
> (doseq [[item-id id] (map vector items ids)]
>   (let [rows (generate-rows-however)]
>     (filter-data rows item-id header id)))
>
> That's not parallel, but I don't know that parallel buys you much when
> the task is I/O bound and takes however long it takes the database
> server to process that number of requests.
>
> If parallelism really does buy you something here you could replace
> (doseq ...) with (dorun (pmap identity (for ...))) and that might
> parallelize the realization of the items, and thus all of the nested
> operations.- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to