A BSP is not an obvious choice—it is useful for indoor scenes and not much else, especially not for dynamic scenes.
An octree is more intuitive. A series of octrees can be used depending on how expansive your game world needs to be vs. fine node coverage. Updating an octree is nearly instantaneous if implemented correctly.
a downside about BSPs/etc is that they don't scale "upwards" particularly great.
like, great for minimizing checks if you have a lot of stuff in a small space, not so great if things are more sparsely distributed.
my personal experience is that for larger worlds, it makes sense to divide things into a regular grid, mostly because a grid can easily extend easily in any direction, and you usually only really need to keep a small number of these grid-blocks loaded at once.
say, a person can use grid-blocks of 256x256x256 meters or similar, with more precise structures within each grid-block;
slight special cases may be involved in the case of objects that protrude from the grid-block (checking for object interactions across adjacent grid-blocks).
then, within each large block, a more precise subdivision can be used (BSP or BVH or octree or whatever else).
personally, I have had some success with dynamic BSP-like trees, but mostly via tricks (figuring out an O(n log n) rebuild algorithm, and separating up various types of objects according to their behavior and whether or not they are currently actively moving). technically, they are hybridized with a BVH though (usually object-based and having bounding volumes, in addition to a division plane), and in some cases incorporate tricks from AVL trees (such as node rotations), and may do partial (localized) rebuilds, so are by no means "traditional" BSP trees (nor even necessarily binary, they may use a "center" branch for things which cross the plane, or for objects which have left their node of origin and can't be "pushed down" to a lower node, ...).
an octree may or may not be simpler or faster, but admittedly I haven't really used them personally.