Let me add a few thoughts to what Jrodman said.
I think the first and most important question is whether or not your field list will be completely static or if it will change. If it changes then the k=v option is a better and more flexible approach. If you have a few variations, it's best to make one sourcetype per set of fields.
Also you should keep in mind that with the k=v approach, you can always do a direct search against "v3=c" (which will be an indexed term in the kv, but it will NOT be in the CSV approach.)
If you're new to splunk, I should point out that searching for "v3=c" (with quotes) is in fact different from searching for v3=c1 (without quotes). The first is an exact string matching type of search. And with normal segmentation rules, it will be a faster lookup if the term c1 commonly occurs in your data other than in the v3 field. The second example is a field search, which requires field extraction. Again, it all depends on the frequency of terms and how you need to search on your data. This doesn't matter so much for pure extraction speed.
So if finding specific records is your goal, then there are some advantagse to the kv approach. But if your actually searching requires are more date based, for example, and your looking to do statistical analysis, then either approach will probably be about as fast and the CSV approach may be more applicable for you. (Jrodman, do you know if FIELDS based extraction is faster or slower than the automatic kv extraction. It seems like CSV could be faster from a parsing perspective, but a more definitive answer on this would be great)
Bottom line. If this is really such a big deal. Then I would recommend testing out both methods. Create two temporary indexes, feed the same data into both (obviously formatted in your two different ways). Also be sure to make a different sourcetype for each test. Make sure that in the CSV sourcetype you set KV_MODE=none in props.conf and rely only on using the FIELDS in transforms.conf (you don't want the overhead of extracting KV pairs from your CSV formatted sourcetype). Then compare the speeds. This shouldn't take too long to setup. Then pick the fastest most ideal solution for you. (Note that comparing bucket sizes is tricky. You would want to rotate your buckets, manually run splunk-optimize , and then manually gzip all of the files in the rawdata folder that don't end with `.gz' already. ... and there could be more involved in a truly fair comparison.)
For a speed test, you may also want to try uncompressing all your .gz files in the rawdata folder. I've heard this can sometime improve performance, but it could also backfire. You'd have to try to know for sure.
Also, if your data is really static (well defined, and strongly typed), then you may be better off feeding your data into a database rather than splunk. Don't get me wrong, I love splunk, it does some really awesome stuff, but I strongly believe in using the right tool for the job. (Hope I don't get in trouble for saying this.) You can probably find a way to pull data back out of your database and feed it back into splunk if you want to leverage splunk's visualization features. It's certainly feasible to to write a small (data generating) search script to pull data from your database and use splunk to post-process or visualize it. Just a thought. There are lots of pros/cons for either approach, but only you know the whole picture.
... View more