static SegmentMetaV1 read(ByteBuffer buffer) {
            long flag = buffer.getLong();
            int version;
            long sectionOffset;
            if (flag == VERSION_FLAG) {
                version = buffer.getInt();
                sectionOffset = buffer.getLong();
            } else {
                version = Version.VERSION_0_ID;
                sectionOffset = flag;
            }

            SegmentMetaV1 info = new SegmentMetaV1(version);
            info.sectionOffset = sectionOffset;
            info.sectionSize = buffer.getLong();
            info.rowCount = buffer.getLong();
            info.columnCount = buffer.getInt();
            if (version >= Version.VERSION_6_ID) {
                info.mode = buffer.getInt();
            } else {
                // We don't have segment mode before v6.
                info.mode = SegmentMode.BASIC.id;
            }

            info.columnNodeInfos = new ColumnNodeMeta[info.columnCount];
            for (int i = 0; i < info.columnCount; i++) {
                info.columnNodeInfos[i] = ColumnNodeMeta.read(buffer);
            }

            info.columnInfos = new ColumnMeta[info.columnCount];
            for (int i = 0; i < info.columnCount; i++) {
                info.columnInfos[i] = ColumnMetaV1.read(version, buffer);
            }

            return info;
        }
Store segment column by column.

<pre>
Segment storage structure:
|  IXRSEGxx | sementMeta | column0 | column1 ... | outerIndex0 | outerIndex0 ... |
            | <---                      sectionSize                        ----> |

Column structure:
|  dpn | rsIndex | extIndex | dataPack |
</pre>
indexr-segment/src/main/java/io/indexr/segment/storage/itg/IntegrateV1.java